Ruby初心者的學習筆記2:難以捉摸的self
3 min readAug 16, 2019
印象中第一次見到self,是在龍哥介紹「開放類別」的時候,那時候也沒有想太多,就是硬記「遇到這種問題就把self帶進去」。但當要我們簡介self的時候,才發現跟self真是不熟啊!
好,先來看看在irb下輸入self會發生什麼事。
他說self是個叫”main“的物件。那main又是什麼呢?根據查詢結果,main是Object class下的實體(instance),概念大概等同於 main = Object.new。
再來用.class的方法看看self屬於哪個類別。
可以得知self是屬於Object類別。果然跟上述main的查詢結果是一致的。
接著來看看self在不同方法下的樣貌。
實體方法(instance method)
此時self為Cat產生的實體
類別方法(class method)
此時self為Cat class本身
類別定義(class definition)
此時self為Cat class本身
模組定義(module definition)
此時self為Cat module本身
繼承(inheritance)
此時self為Meow產生的實體
引入模組(include module)
此時self為Meow產生的實體
總結
在類別方法、類別定義、模組定義下,self為其類別、模組本身。
而在實體方法、繼承、引入模組時,因為皆使用了實體方法,所以self為該類別產生的實體。
寫到這裡,其實對self還是似懂非懂,就留待功力更高深(應該會有那一天……吧?)的時候再來補充了。
參考資料:
Rubyのselfが微妙に意味がわからなかったので、様々な文脈(トップレベル、class定義内、method定義内、module定義内)で出力してみた