繁体   English   中英

如何在Ruby中编写两个带有不同数量参数的方法

[英]How do write two methods with different number of arguments in Ruby

我正在尝试在课堂上写这个:

class << self
    def steps
      @steps.call
    end

    def transitions
      @transitions.call
    end

    def steps(&steps)
      @steps = steps
    end

    def transitions(&transitions)
      @transitions = transitions
    end
  end

因为在Ruby中,我无法执行这种方法重载,所以这是行不通的。 有没有解决的办法?

您可以使用方法别名和mixins来做到这一点,但是在Ruby中处理具有不同签名的方法的方式是使用可选参数:

def steps(&block)
  block.present? ? @steps = block : @steps.call 
end

但是,这种委托是一种代码味道。 这通常意味着您设计的界面有些尴尬。 在这种情况下,类似这样的方法可能更好:

def steps
  @steps.call
end

def steps=(&block)
  @steps = block
end

由于遵循约定,因此这使系统中的其他对象清楚如何使用此接口。 它还允许其他情况,例如将块传递到steps方法中以用于其他用途:

def steps(&block)
  @steps.call(&block)
end

Ruby不支持方法重载(原因请参见“ 为什么ruby不支持方法重载? ”)。 但是,您可以执行以下操作:

def run(args*)
  puts args
end

args将是传入参数的数组。

您还可以传递选项的哈希值来处理参数,或者当您不想在方法主体中提供参数并处理nil时可以传递nil

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM