Ruby中未初始化的常量MyClass(NameError)

我有一个模块Shish(它的作用类似于一个抽象类)和一个访问者类Only_Onions。

我想在模块Shish中实例化Only_Onions,这样所有扩展Shish的类都可以使用该对象来判断它们是否只有_onion。

module Shish only_onions_class = Only_Onions.new end class Only_Onions def for_skewer return true end end class Skewer include Shish def only_onions return only_onions_class.for_skewer end def veg? return true end end 

但我得到一个错误“未初始化的常量Shish :: Only_Onions(NameError)。这是什么意思?

声明的顺序有效。 Shish不知道代码中的Only_Onions。 如果将其更改为this,则在定义模块Shish时已经声明了Only_Onions:

 class Only_Onions def for_skewer return true end end module Shish only_onions_class = Only_Onions.new end class Skewer include Shish def only_onions return only_onions_class.for_skewer end def veg? return true end end 

尝试

 ::Only_Onions