Ruby中的字符串作为对象方法

时间:2019-02-20 14:38:40

标签: ruby

是否可以使用字符串来调用对象上的方法。例如,使用字符串k,如何在类foo = 'bar'bar上调用Baz。一种替代方法是创建这样的case语句;

Baz.bar

1 个答案:

答案 0 :(得分:4)

您只能使用send调用对象上的任何方法:

foo = 'bar'
Baz.send(foo) // calls bar on Baz

这也调用私有方法。如果只想调用公共方法,请使用public_send

foo = 'bar'
Baz.public_send(foo) // calls only public method bar on Baz

如果要检查是否定义了公共方法,可以使用respond_to?

foo = 'bar'
if Baz.respond_to?(foo)
  // only gets executed if public method bar is defined on Baz
  Baz.send(foo) // executes bar on Baz
end

如果您还想检查私有方法,则必须提供true作为第二个参数:

Baz.respond_to?(foo, true)