2011-10-21 65 views
1

我在參考ruby中的模塊級變量時遇到了一些困難。說我有這樣的情況,在這裏我指的是馬內:參考模塊內的模塊級變量

module M 
    @@a=1 

    def self.a 
    @@a 
    end 

    class A 
    def x 
     M.a 
    end 
    end 
end 

現在,這個例子中工作正常,我卻是在一個稍微複雜一點的情況下(其中模塊分佈在一個失敗在本地gem中安裝的文件數量 - 但我的理解是,這不應該影響代碼執行的方式),並且會出現如下錯誤:對M :: M(NoMethodError)的未定義方法「a」。

那麼,這是在上下文中引用模塊級變量的正確方法嗎?有沒有更簡單/更習慣的方式?

回答

3

如果模塊分散在其他文件上,則需要確保在調用方法之前運行初始化。如果他們在同一個文件中,這應該是一樣的保證,但如果你以某種方式分裂他們可能會有麻煩。

我發現你通常可以逃脫這樣的:

module M 
    def self.a 
    @a ||= 1 
    end 
end 

如果這個變量如有更改,您將需要一個賦值函數方法。 Rails提供mattr_accessor,它基本上做你想做的,作爲ActiveSupport的一部分。