Ruby原理剖析 物件與類的內部資料結構

2021-08-07 15:30:32 字數 930 閱讀 4644

《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...