selfを省略できる時
rubyではメソッドの中で、そのメソッドが属しているインスタンスをself
で参照できます。 そしてこのselfは省略可能、というより、メソッド中でレシーバを省略してメソッド呼び出しを行った場合は、暗黙的にself
がレシーバになります。
class User
attr_accessor :name
def display_name
puts name # puts self.name と同じ
end
end
user = User.new
user.name = 'yamada'
user.display_name # 'yamada' と表示する
rubyで上記のようにレシーバを省略出来るときは、省略するのが一般的。
ただし一点だけ、self
を省略出来ない場合があります。
selfを省略できない時
セッターメソッドを呼ぶ時はselfを省略出来ません。以下set_default_name
メソッドの様な例ですね。
class User
attr_accessor :name
def set_default_name
name = 'unknown' # nameというローカル変数が作られるだけ
# self.name = 'unknown' # こう書くべき
end
end
user = User.new
user.set_default_name
user.name # => nil
上記の場合だと、最後にuser.name
を呼び出してもnil
が返ってくるだけです。rubyってとにかくレシーバは省略するんだよね〜、ととりあえず的に覚えてたらちょっと引っかかりやすい。