Наименование метода Ruby с существующей константой - PullRequest
4 голосов
/ 19 апреля 2011
module Foo
  def self.bar
    "Module.bar"
  end
end

def Foo
  "main.Foo"
end

puts Foo # Foo
puts Foo.bar # Module.bar
puts Foo() # main.Foo
puts Foo.class # Module

Почему модуль Foo и метод Foo могут сосуществовать в одном и том же пространстве имен? Почему определение метода Foo не перезаписывает модуль?

1 Ответ

6 голосов
/ 19 апреля 2011

Они не существуют в одном и том же пространстве имен.Константы и методы находятся в разных пространствах имен.Вот как они сосуществуют.Язык ищет в пространстве имен констант, если вы не используете паренсы вызова метода, которые однозначно говорят: «Это должен быть метод».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...