如何为对象调用自定义方法?

时间:2012-02-15 14:01:40

标签: ruby

我有一个有几种方法的课程:

class Test
  def initialize (age, height)
    @age = age
    @height = height
  end

  def older
    @age = @age + 2
  end

  def shorter
    @height = @height - 5
  end
end

man = Test.new(40, 170)
man.older
man.shorter

[...]

我想将对象man传递给自定义方法,也就是说,我想写一些类似man.variablemethod的内容,并将.variablemethod设置为.older或{{1} ,取决于一些其他因素。我怎么能这样做?

我发现我可以调用“.shorter”,但我不想使用if condition then man.older,尤其是当我有20种不同的方法可供选择时。

1 个答案:

答案 0 :(得分:3)

听起来你需要send

man.send(method_name)

您可以传递表示您要调用的方法名称的字符串或符号,甚至也传递其他参数:

def man.older_by_increment(years)
  @age += years
end

man.send(:older_by_increment, 7)

这也允许您从任何地方调用private和protected方法:

class Man

  # ...

  private

  def weight
    @weight
  end
end

Man.new.weight         # => private method `weight' called for #<Man:0x10bc956d8> (NoMethodError)
Man.new.send(:weight)  # => @weight