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

时间:2009-05-16 16:04:14

标签: ruby

我有一个模块Shish(就像一个抽象类)和一个访问者类Only_Onions。

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

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)。这是什么意思?

2 个答案:

答案 0 :(得分:7)

声明的顺序有效。 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

答案 1 :(得分:1)

::Only_Onions