2011-12-01 31 views
0

有人可以向我解釋這將做什麼?Ruby模塊self.class和class_inheritable_accessor

Module Foo 
    class Bar 
    class_inheritable_accessor :foobar 
    def foobar 
     self.class.foobar 
    end 
    end 
end 

我希望我可以更清楚,但我不知道這是幹什麼的。我在我正在使用的一段代碼中找到它。

我沒有看到任何其他地方的其他定義foobar。那麼該方法的參考是什麼?本身?

它似乎工作正常。

回答

1

類可繼承的訪問器允許類在層次結構中覆蓋類變量。

我以爲class_inheritable_accessor已經定義了一個從可繼承屬性散列中讀取的類變量getter。你展示的例子似乎繞過了foobar,所以我不清楚最初的意圖是什麼 - 你能展示更多的上下文嗎?

請參閱here for a nice discussion

+0

對不起戴夫,代碼對我來說太大了,無法解析上下文。但是要解決你的問題。如果代碼中有其他地方,self.foobar =「Hi」 - 這是否意味着class_inheritable_accessor允許我通過self.class.foobar接收「Hi」? – vinhboy

+0

@vinhboy是的,因爲'class_inheritable_accessor'爲類變量創建了一個getter/setter。吸氣劑被覆蓋,這是我沒有得到的。 –

+0

謝謝。你回答了我的問題。我贊同你。我不明白他們爲什麼重寫了吸氣劑。它真的讓我感到困惑。我刪除它,並且一切似乎正常工作。再一次,非常感謝你! – vinhboy