我想在课堂上写这个:
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中,我不能做这种方法重载。有办法解决这个问题吗?
答案 0 :(得分:6)
你可以使用方法别名和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
答案 1 :(得分:0)
Ruby不支持方法重载(请参阅&#34; Why doesn't ruby support method overloading?&#34;原因)。但是,您可以执行以下操作:
def run(args*)
puts args
end
args
将是传入的参数数组。
您还可以传入一个选项哈希来处理参数,或者当您不想提供参数并在方法体中处理nil
时,您可以传入nil
。 / p>