Ruby元編程筆記 - 對(duì)象模型

Tips
  • 類名不過(guò)是常量
  • 對(duì)象包含了實(shí)例變量,它就好像一個(gè)Hash表一樣。
  • 方法存放在類之中。
類自身也是對(duì)象
"hello".class #=> String
String.class  #=> Class
Class.class  #=> Class

String.ancestors
  #=> [String, Comparable, Object, Kernel, BasicObject]
Object.superclass
  #=> BasicObject

Class.ancestors
  #=> [Class, Module, Object, Kernel, BasicObject]

  • 所有的類都是Class的子類,而Class繼承自Module。所以類只是比模塊多了superclass(), new(), allocate()這三個(gè)方法。

  • Kernel只是mixin在BasicObject里的一個(gè)模塊,它能出現(xiàn)在ancestors中,但并不代表Object繼承自Kernel。因?yàn)檫@個(gè)祖先鏈的關(guān)系,所以所有對(duì)象都能調(diào)用Kernel里的方法。

self

頂級(jí)上下文:

self        #=> main
slef.class  #=> Object

當(dāng)開(kāi)始運(yùn)行ruby程序的時(shí)候,解釋器會(huì)創(chuàng)建一個(gè)名為main的對(duì)象最為當(dāng)前對(duì)象,它被稱為頂級(jí)上下文(top level context)是因?yàn)檫@時(shí)處在調(diào)用堆棧的頂層:這時(shí)要么還沒(méi)有調(diào)用任何方法,要么調(diào)用的方法都已經(jīng)返回了。P.S. Ruby的main對(duì)象和C系的main函數(shù)沒(méi)有關(guān)系。

private
  1. 如果調(diào)用方法的接收者不是自己,則必須指明一個(gè)接收者;
  2. 私有方法只能被隱含接收者調(diào)用;

所以,不能明確指定一個(gè)接收者調(diào)用一個(gè)私有方法,即每次調(diào)用私有方法只能用隱含的接收者self調(diào)用。

所以與C系語(yǔ)言不同的是,子類可以調(diào)用基類的私有方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容