我有一个有几种方法的课程:
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种不同的方法可供选择时。
答案 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