Опитвам се да използвам отразяващи методи в Ruby и се натъквам на поведение, което намирам за наистина изненадващо.
Следните примери изглежда работят по различен начин в IRB и когато се наричат рубинен скрипт:
Пример 1:
def myfun; end
p respond_to?(:myfun)
В IRb това казва „true“, в скрипта: „false“.
Пример 2:
ml = methods
def myfun; end
p methods - ml
В IRb това казва [:myfun]. В сценария: [].
Намерих това под 1.8, 1.9 MRI, JRuby 1.5.6 и т.н. - така че предполагам, че това е нормално.
Защо е разликата?
Бях доста сигурен, че 'respond_to?' е начинът да видите дали даден метод е наличен - защо това не работи в горния случай?