Доступ к методу модуля Ruby - PullRequest
27 голосов
/ 24 марта 2011

У меня есть модуль ruby ​​для констант. У него есть список переменных и 1 метод, который применяет форматирование. Я не могу получить доступ к методу в этом модуле. Есть идеи почему?

Ответы [ 3 ]

61 голосов
/ 24 марта 2011

Если вы include модуль метод становится метод экземпляра , но если вы extend модуль, то он становится метод класса .

module Const
  def format
    puts 'Done!'
  end
end

class Car
  include Const
end

Car.new.format # Done!
Car.format # NoMethodError: undefined method format for Car:Class

class Bus
  extend Const
end

Bus.format # Done!
Bus.new.format # NoMethodError: undefined method format
33 голосов
/ 24 марта 2011
module Foo
  def self.hello # This is a class method
    puts "self.hello"
  end

  def hello # When you include this module, it becomes an instance method 
    puts "hello"
  end
end

Foo.hello #=> self.hello

class Bar
  include Foo
end

Bar.new.hello #=> hello
0 голосов
/ 24 марта 2011

Обычно с модулями должно происходить следующее:

-> Путь автозагрузки в application.rb, добавить строку:

config.autoload_paths += %W(#{config.root}/lib)

-> Поместить модуль в / lib

-> Включить модуль с «include NAMEOFMODULE»

(Если модуль имеет нижнее подчеркивание, например game_engine, вам необходимо «включить GameEngine»)

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