Включая тот же файл модуля внутри себя в Ruby? - PullRequest
0 голосов
/ 15 сентября 2010

Я изучаю ruby ​​и про модули и миксины.

Я попробовал следующий код.Имя файла ruby ​​test.rb.

module Mod1
  def Mod1.sayHello()
    puts "Hello Mod1"
  end

end

module Mod2
  def Mod2.sayHello()
    puts "Hello Mod2"
  end
end


class TestMod
  require 'file'
  Mod1.sayHello
end

t = TestMod.new

Я удивлен выводу: Hello Mod1 Hello Mod1 (дважды)

У меня нет объяснения этому,кто-нибудь может помочь?

1 Ответ

1 голос
/ 15 сентября 2010

Вы не определили свой метод initialize для своего класса (конструктор). Вы просто выполняете Mod1.sayHello внутри определения класса (оно даже выполняется перед созданием экземпляра). Попробуйте закомментировать ваше заявление t = TestMod.new. Вывод все равно останется видимым.
Поскольку вы включаете один и тот же файл, это заканчивается тем, что выполняется дважды (файл не включается в другой раз после этого; ruby ​​предотвращает это). Класс должен выглядеть так:

class TestMod
  def initialize
    Mod1.sayHello
  end
end

Почему вы все равно включили файл? Это не имеет смысла для меня.

РЕДАКТИРОВАТЬ: Устранена ошибка.

Я бы рекомендовал заменить Mod1 и Mod2 внутри определений вашего модуля на self. Таким образом, вам не придется менять имя везде, если оно когда-нибудь изменится.

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