【发布时间】:2013-03-29 13:15:28
【问题描述】:
假设我有一个带有访问对象的方法的对象:
def foo
@foo
end
我知道我可以使用 send 来访问该方法:
obj.send("foo") # Returns @foo
有没有一种直接的方法来进行递归发送以获取@foo 对象上的参数,例如:
obj.send("foo.bar") # Returns @foo.bar
【问题讨论】:
-
obj.send('foo').send('bar') -
@SergioTulentsev - 对不起,我应该澄清一下 - 有没有办法一步完成。您所描述的将需要解析他的字符串“foo.bar”以意识到您需要递归调用 send() 。我只是想知道是否有一些现有的机制可以自动或更干净地做到这一点。
-
@Lynn:我不知道这种内置机制。
-
是的,我认为
"foo.bar".split('.').inject(obj) { |obj, property| obj.send(property) }是你能得到的最接近的。 -
@PascalJungblut 可以简化为
"foo.bar".split(".").inject(obj, :send)。
标签: ruby metaprogramming