Следующая определяет метод, который имеет upcased имя, и пытается вызвать его, но терпит неудачу:Upcased метод не обнаружен
class Module
def Foo; puts "foo" end
end
class A
Foo
end
# => uninitialized constant A::Foo
Я понимаю, что существование константы с тем же именем, будет иметь приоритет над метод искать, но в этом случае такой константы нет.
Если я неоднозначность его как метод, метод обнаружения:
class A
Foo()
end
# => foo
Когда имя метода не upcased, посмотреть не удастся.
class Module
def foo; puts "foo" end
end
class A
foo
end
# => foo
Почему метод поиска не работает с двусмысленными усовершенствованными методами?
Что делает случай констант отличным от локальных переменных? – sawa
Различие между сообщениями и переменными различиями производится статически. Выяснение, какие локальные переменные находятся в области видимости, может быть сделано статически, но для констант это будет эквивалентно решению проблемы остановки. Или хуже: 'модуль Foo; Bar =: baz end; если rand> 0,5, тогда включайте конец Foo; Бар № бар в области или нет? ' –
Я вижу. Я чувствую, что получил (но все еще понимаю). – sawa