Rubyのsetterの戻り値がキモい件
※正確には、setterじゃなくて、代入でsetterが使用される場合の戻り値がキモい。というお話。
class Test def value= value "value" end end t = Test.new p (t.value = 10) #=> 10 p (t.value=(10)) #=> 10 p (t.__send__ :value=, 10) #=> "value"
うん、まあわかるんだけどね。利便性もそのほうが高いし、多分、二番目は
t.value = (10)
として解釈されてるんだろうし。でもなんとなくキモい。
発端
class Test attr_reader :value def value= value @value = value "value" end end t1 = Test.new t2 = Test.new t1.value = t2.value = 10 p t1.value #=> 10 p t2.value #=> 10
え、これって
t1.value = (t2.value = 10)
じゃなくて
t1.value = 10 t2.value = 10
として解釈されてんの? おかしくね?
と思って調べてみますた。
多分、解釈は前者でいいんだけど戻り値が不思議だっただけかと思われます。