最佳答案
据我所知,在 Ruby 中有三种动态调用方法的方法:
方法一:
s = SomeObject.new
method = s.method(:dynamic_method)
method.call
方法二:
s = SomeObject.new
s.send(:dynamic_method)
方法三:
s = SomeObject.new
eval "s.dynamic_method"
通过对它们进行基准测试,我发现方法1是目前为止最快的,方法2是目前为止最慢的,而方法3是目前为止最慢的。
我还发现 .call
和 .send
都允许调用私有方法,而 eval
不允许。
所以我的问题是: 有什么理由使用 .send
或 eval
吗?为什么不总是用最快的方法呢?这些调用动态方法的方法还有哪些不同之处?