《ruby原理剖析》的學習筆記
下圖為ruby物件,類,及元類的資料結構關係。
ruby物件的定義:每個ruby物件都是類指標和例項變數陣列的組合。
ruby類的定義 :ruby類是包含方法定義,屬性名稱,超類指標,常量表的ruby物件。
robject:ruby物件的c結構體
flags:一組布林值,用來儲存各種內部專用的值
klass:類指標
numiv:紀錄了包含在該物件中例項變數的數量
ivptr:指向儲存改物件例項變數值的陣列指標
rclass:ruby類的c資料結構
rclass(metaclass):ruby元類的c資料結構
m_tbl:是乙個方法雜湊表,以方法名或者id為鍵,以每個方法定義的指標——包含
被編譯的yarv指令——為值
類中的m_tbl儲存例項方法
元類中的m_tbl儲存類方法
(類本身也是物件,所以呼叫類方法時,以類為物件,找到的是元類的m_tbl)
iv_index_tbl:是乙個屬性名稱雜湊表。該雜湊表是例項變數的名稱和robject例項變數陣列
中屬性值索引的對映
super:是當前類的超類的rclass結構體的指標
iv_tbl:包含類級別的例項變數和類變數,包括它們的名字和值
const_tbl:是包含所有被定義在類作用域中常量(名字和值)雜湊
origin:ruby使用origin用來實現module#prepend特性
refined_class:ruby用refined_class指標來實現新的特性refinement
allocator:ruby內部用allocator為類的每個新的例項物件來分配記憶體
ruby類與物件
ruby中的物件是類生成的,而類本身也是物件。ruby的頂級類是object其餘所有的類都直接或簡介繼承與object。其中class繼承module,module繼承object,而所有的物件其實都是class類的示例,這其中當然包括object,module,以及class類本身。這便產生了一些...
Ruby 中的類和物件
最近在ruby china中閒逛,無意中發現了一位提出的問題,這個問題相當有意思,並且促使我寫下了這篇部落格。原問題是這樣描述的 class object defdo it puts do it endend object do it 這個class method 怎麼來的?object new d...
Ruby 中的類和物件
近在ruby china中閒逛,無意中發現了一位提出的問題,這個問題相當有意思,並且促使我寫下了這篇部落格。原問題是這樣描述的 class object defdo it puts do it endend object do it 這個class method 怎麼來的?object new do...