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