はじめに
今回はselfに関する内容です。selfの参照先はselfが呼び出される場所で異なるらしいのでかんたんにまとめてみます。
確認してみた
環境はruby2.5.3です。
まず、selfを呼出すメソッドが定義されたClsを作成し実行する。
class Cls
p self
def hoge
self
end
end
すると、
Cls
が表示され、Cls内のselfはClsクラスを参照している。
次に、Aインスタンスを作成し、AとA.hoge(=self)が同じかどうか確認すると、
irb(main):007:0> A = Cls.new
=> #<Cls:0x0000563638a63190>
irb(main):008:0> A.equal?(A.hoge)
=> true
trueとなり、メソッド内のselfはレシーバ(Aインスタンス)を参照していることが分かった。
おわりに
確認した結果、selfの参照先はselfがクラス内に定義された時はクラス自身を、メソッド内に定義された時はレシーバを参照することが分かった。もし誤っていたらご指摘いただけると助かります!
参考