Я пытаюсь использовать рефлексивные методы в Ruby и сталкиваюсь с поведением, которое я нахожу действительно удивительным.
Следующие примеры работают по-разному в IRB и при вызове ruby-скрипта:
Пример 1:
def myfun; end
p respond_to?(:myfun)
В IRb это говорит «истина», в скрипте: «ложь».
Пример 2:
ml = methods
def myfun; end
p methods - ml
В IRb это говорит [:myfun]. В сценарии: [].
Я нашел это в версиях 1.8, 1.9 MRI, JRuby 1.5.6 и т. д., поэтому я предполагаю, что это нормально.
Почему разница?
Я был уверен, что 'respond_to?' это способ узнать, доступен ли метод - почему это не работает в приведенном выше случае?