最近,我正在研究關於Ruby類的一些細節,並且被類定義弄糊塗了。關於Ruby中的類定義
在Ruby中,類定義如下,
class A
def self.my_method
end
end
和它一樣
class A
class << self
def my_method
end
end
end
然後我被搞糊塗了。對於第一種情況,self可以被看作是當前使用對象的指針,而當前上下文的類是A.並且遞歸地執行查找方法。但我的問題是,def做什麼?它如何改變當前的對象和上下文?第二種情況的問題是一樣的。如何描述如類< < self更改當前對象和上下文?
還有一個問題。據我所知,所有的Class對象都遵循像fly-weight這樣的設計模式,因爲它們共享具有相同定義的同一個Class對象。然後特徵類變得混亂。由於本徵類中的def實際上定義了一個帶有Class對象的方法,它如何與「def self。*」相關?
從外面看起來太複雜了,我可能需要Ruby的設計細節。
實際上我沒有得到你的困惑...... self是單例類實例,所以'def self.foobar'聲明瞭一個類方法,而'def foobar'聲明瞭一個實例方法,其中self是當前實例。 至於你的情況......他們不應該都是一樣的嗎? (你正在聲明類方法) – robustus
也許這有助於:http://stackoverflow.com/questions/1630815/why-isnt-the-eigenclass-equivalent-to-self-class-when-it-looks-so-similar/ 1631005#1631005 –