据我所知,在Ruby中动态调用方法有三种方法:
方法1:
s = SomeObject.new
method = s.method(:dynamic_method)
method.call
方法2:
s = SomeObject.new
s.send(:dynamic_method)
方法3:
s = SomeObject.new
eval "s.dynamic_method"
通过对它们进行基准测试,我确定方法1是迄今为止最快的,方法2是较慢的,方法3是迄今为止最慢的.
我还发现.call
和.send
都允许调用私有方法,而eval
则不允许.
所以我的问题是:有任何理由使用.send
或eval
吗?你为什么不总是使用最快的方法呢?这些调用动态方法的方法还有什么区别?