2009-05-16 68 views
6

我有一個模塊Shish(其行爲類似抽象類)和訪問者類Only_Onions。未初始化的常量MyClass(NameError)在Ruby中

我想在模塊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 

但我得到一個錯誤「未初始化不斷烤羊:: Only_Onions(NameError)。這是什麼意思?

回答

6

聲明的順序有效果。烤羊沒有按不知道代碼中的Only_Onions。如果將其更改爲此,則在定義模塊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 
+0

這解決了原來的問題。但我認爲only_onions_class需要是一個類變量。我對麼?我仍然可以使上面的代碼正確工作嗎? – unj2 2009-05-16 18:15:08

1

嘗試

::Only_Onions 
+1

我以爲::是隻有當你有一個模塊名稱之前,它的類名後指定一個命名空間?當你在沒有模塊的情況下使用它時,它會做什麼?我不熟悉這一點。 – 2009-05-16 16:42:06

+1

空白名稱空間表示全局名稱空間。所以Object是「Object」和「:: Object」。 – Chuck 2009-05-16 17:02:42

相關問題