Насколько мне известно, в 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
? Почему бы вам не всегда использовать самый быстрый метод? Какие еще отличия имеют эти способы вызова динамических методов?
.public_send
вместо.send
, чтобы запретить вызов приватных методов. - person Dennis   schedule 11.09.2014