定義const_missing
和class << self
定義中的其他類方法時,Ruby的行爲與使用def self.foo
語法相反,我非常困惑。「class << self」定義中缺少常量和「const_missing」
我試圖做這樣的事情:
class Foo
class << self
def foo
puts MISSING
end
def const_missing(name)
puts "#{name} missing"
end
end
end
Foo.foo
我大多使用的class << self
語法來定義類的方法。但是,它沒有按預期工作。永遠不會調用const_missing
。上面的結果是一個NameError。
定義兩種方法這樣按預期工作:
def self.foo
puts MISSING
end
def self.const_missing(name)
puts "#{name} missing"
end
我認爲class << self
語法只是另一種方式來定義類的方法,但完全等同於def self.foo
?我已經用MRI 1.8.7,1.9.2和JRuby 1.5.6測試了上述內容。很顯然,我在這裏錯過了一些東西?
任何提示是非常感謝。
謝謝,馬丁
非常感謝,LBG。我知道'class << self'打開了一個類的特徵類。但是因爲類方法只是本徵類的實例方法,所以我認爲它會以這種方式工作。然而,從特徵類引用的常量與從類本身引用的常量不同,這是非常有意義的。有時這整件事讓我的頭旋轉:) – martido