Ruby初心者的學習筆記2:難以捉摸的self

Ruby初心者的學習筆記2:難以捉摸的self

印象中第一次見到self,是在龍哥介紹「開放類別」的時候,那時候也沒有想太多,就是硬記「遇到這種問題就把self帶進去」。但當要我們簡介self的時候,才發現跟self真是不熟啊!

好,先來看看在irb下輸入self會發生什麼事。

self1

他說self是個叫”main“的物件。那main又是什麼呢?根據查詢結果,main是Object class下的實體(instance),概念大概等同於 main = Object.new。

再來用.class的方法看看self屬於哪個類別。

self2

可以得知self是屬於Object類別。果然跟上述main的查詢結果是一致的。

接著來看看self在不同方法下的樣貌。

實體方法(instance method)

self3

此時self為Cat產生的實體

類別方法(class method)

self4

此時self為Cat class本身

類別定義(class definition)

self5

此時self為Cat class本身

模組定義(module definition)

self6

此時self為Cat module本身

繼承(inheritance)

self7

此時self為Meow產生的實體

引入模組(include module)

self8

此時self為Meow產生的實體

總結

在類別方法、類別定義、模組定義下,self為其類別、模組本身。

而在實體方法、繼承、引入模組時,因為皆使用了實體方法,所以self為該類別產生的實體。

寫到這裡,其實對self還是似懂非懂,就留待功力更高深(應該會有那一天……吧?)的時候再來補充了。

參考資料:

Understanding self in Ruby

Rubyのselfが微妙に意味がわからなかったので、様々な文脈(トップレベル、class定義内、method定義内、module定義内)で出力してみた

Ruby のトップレベルについておさらい

Recent post