红宝石中的模块

时间:2010-07-14 14:33:40

标签: ruby


module Hints
 module Designer
  def message
   "Hello, World!"
  end
 end
end

p Hints::Designer.message


为什么这会给我以下错误??

Hints :: Designer的未定义方法`message':模块(NoMethodError)

3 个答案:

答案 0 :(得分:7)

您需要做的是将消息定义为类方法(而不是实例方法)。尝试:

module Hints
 module Designer
  def self.message
   "Hello, World!"
  end
 end
end

puts Hints::Designer.message

如果要将实例方法与模块一起使用,则必须使用模块和任何给定的约束扩展对象(请参阅http://ruby-doc.org/core/classes/Module.html)。

答案 1 :(得分:2)

你想用这个:

module Hints
 module Designer
  def self.message
   "Hello, World!"
  end
 end
end

即,使message成为“类”方法(在它是实例方法之前)。这看起来有点奇怪,但请记住,模块通常用于创建mixin类,因此“模块实例”在该上下文中是有意义的。

答案 2 :(得分:1)

使用p Hints::Designer.new.message

message是一个实例方法而不是类方法

相关问题