結論
selfはクラスとインスタンスのどちらも指すことができます。
背景
自分としては、インスタンスを指すイメージの方が強かったのですが、最近クラスを指すのを知ったのでまとめました。
「rubyはjavaでいうthisと同じだよ」って聞いた気がするのですが、完全に同じなのか今もわからないです。今はJavaのthisを忘れてしまったので。
実験
class ClassA
def foo # インスタンスメソッド
puts "ins_foo"
puts self #このselfはインスタンス(ClassAのインスタンス)を指す
end
def self.foo # クラスメソッド(このselfはクラス自身(ClassA)を指す)
puts "self_foo"
puts self # このselfはクラス自身(ClassA)を指す
end
end
ClassA.foo
# self_foo
# ClassA # クラスを指している
ClassA.new.foo
# ins_foo
# #<ClassA:0x00007f93108144d0> # インスタンスを指している
クラスメソッドを定義するときはself.
をつけるって読んだことあるのですが、そのselfはクラスを指していたんですね。