Ruby模块方法访问

时间:2011-03-24 09:42:50

标签: ruby

我有一个常量的ruby模块。它有一个变量列表和一个应用格式的方法。 我似乎无法访问此模块中的方法。知道为什么吗?

3 个答案:

答案 0 :(得分:61)

如果您include该模块该方法变为实例方法,但如果您extend该模块,那么它将成为类方法。< / p>

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

答案 1 :(得分:33)

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

答案 2 :(得分:0)

通常,对于模块,这些事情应该发生:

- &GT; application.rb中的自动加载路径,添加行:

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

- &GT;将模块放在/ lib

- &GT;包含'include NAMEOFMODULE'

的模块

(如果模块有像game_engine这样的下划线,你需要'包含GameEngine')