假设:
s = "foo_bar_path"
我如何评估或限制s,并将参数传递给它,例如我的最终结果将等同于:
foo_bar_path(@myvar, @foobar)
我正在尝试eval(s).send
,但这似乎不起作用。 constantize似乎只适用于Classes?
答案 0 :(得分:11)
您只需在适当的对象上使用send
method(或public_send
,具体取决于您的需求):
some_object.send(s, @myvar, @foobar)
或者如果你想自己调用一个方法:
self.send(s, @myvar, @foobar)
文档说“符号”,但send
同样乐于在字符串中获取方法名称。
答案 1 :(得分:2)
另一种解决此类问题的方法(对OpenStruct更好):
#for more in this domain, see the Ruby core API for the Object class
class Demo
def initialize(n)
@iv = n
end
def hello()
"Hello, @iv = #{@iv}"
end
end
k = Demo.new(99)
m = k.method(:hello)
m.call #=> "Hello, @iv = 99"