アクセサと自己代入演算(+=とか) - Ruby -

Rubyのアクセサで += させたらどうなるのかなと思ったので実験しました。


ソース

class Acc
def initialize
@val = ""
end
attr_accessor :val
end

a = Acc.new
p a.val
# ""


a.val = "test"
p a.val
# "test"


a.val += "test"
p a.val
# "testtest"


結果

""
"test"
"testtest"


リファレンスを見る attr_accessor : は

def name
@name
end
def name=(val)
@name = val
end

と定義した同じようなのですが「+=」がないな〜という疑問出てきましたので
連結させているStringにあるのかなと思って

p "a".methods

で調べてみても見つかりませんでした。リファレンス2を見ると

foo += 12 # foo = foo + 12

実際の処理は「foo = foo + 12」ということかな?