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

时间:2017-04-14 16:12:49

标签: 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中,我不能做这种方法重载。有办法解决这个问题吗?

2 个答案:

答案 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>