演算子式の戻り値
Rubyではいくつかの演算子はクラスのメソッドとして再定義することが可能です。ということは、演算子式の戻り値を変えてやれば、代入式の評価結果を変更できるんじゃね?と思いたって試してみましたがやはり不可でした。
class Foo def var=(value) return "var=" end def []=(key, value) return "[]=" end end puts "\n--- =" foo = Foo.new puts foo.var="aaa" puts foo.var="bbb" puts "\n--- []=" puts foo["a"]="aaa" puts foo["b"]="bbb"
実行結果です。左辺の値が式全体の評価結果になっています。
--- = aaa bbb --- []= aaa bbb
まぁ、↓みたいなコードで実行後にresultとfoo.varの値が違っているとかいう方が不気味かもなー。
result = foo.var = "xxx"
ちなみに「+」演算子の戻り値は制御可能です。
class Foo def +(value) return "+" end end puts "\n--- +, +=" puts foo + "aaa" puts foo += "bbb" puts foo
実行結果です。
--- +, += + + +