是否可以使用字符串来调用对象上的方法。例如,使用字符串k
,如何在类foo = 'bar'
:bar
上调用Baz
。一种替代方法是创建这样的case语句;
Baz.bar
答案 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)