1
我有這樣的代碼:常量在單班
class A
def print
puts CONSTANT
end
end
module B
CONSTANT = "Don't Panic!"
end
假設a
是A類的一個實例
所以,我需要的CONSTANT
應該能夠定義被發現,使a.print
可用。
我認爲包括模塊B
到a
的單例類,如:
a.singleton_class.send :include, B
a.print # error: CONSTANT isn't found
我以爲這應該沒問題,現在要調用的方法,但實際上不是。
常量應成功導入爲下面的代碼工作的期望:
a.singleton_class.constants # => [.., :CONSTANT, ..]
然而,包括恆進的類,而不是單例類,它的工作原理:
a.class.send :include, B
a.print # prints: Don't Panic!
我覺得很奇怪,我不能引用在單例類中定義的常量。如果這是合理的,我想知道爲什麼。
在此先感謝。
謝謝你。我知道這一點,但它仍然很奇怪,因爲Ruby並沒有將在其單例類中定義的常量視爲可訪問的類,而只是將其定義爲類。這是一個錯誤還是某種功能? – 2012-07-31 00:52:18
謝謝你,有趣的問題。老實說,我認爲沒關係。 Singleton類應該是繼承的匿名類,這就是繼承的工作方式 - 在子類中定義的常量(或方法)不應出現在父類中。如果我們違反了這條規則,那麼我們就失去了繼承的想法,恐怕它可能導致糟糕的設計。 – 2012-08-01 15:22:13