Почему Ruby не может найти метод, объявленный прямо выше? - PullRequest
0 голосов
/ 13 июня 2019

У меня есть простой файл с именем helper.rb, который выглядит следующим образом:

module MyHelper
  def initialize_helper
    puts "Initialized"
  end

  initialize_helper()
end

И еще один простой файл, подобный этому:

require_relative 'helper.rb'
include MyHelper
puts "Done"

Но когда я запускаю этот второй файл, это приводит к этой ошибке:

helper.rb:6:in `<module:MyHelper>': undefined method `initialize_helper' for MyHelper:Module (NoMethodError)

Почему Ruby не может найти этот initializeHelper метод, определенный непосредственно выше, где я его вызываю ???

1 Ответ

3 голосов
/ 13 июня 2019

Попробуйте

def self.initialize_helper
  puts "Initialized"
end

Без self. вы объявляете метод экземпляра, предназначенный для вызова на объектах, а не на самом модуле.Так, например, ваш оригинальный код предназначен для использования как

module MyHelper
  def initialize_helper
    puts "Initialized"
  end
end
class Foo
  include MyHelper
end
Foo.new.initialize_helper

Но если вы хотите назвать его на модуле, вам нужно иметь self. передэто сделать его методом на самом модуле.

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