[英]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.