加法演算子(+
)、等値演算子(==
)に限らずすべての演算子は可換でないと言えると思うけど、加法・等値は特に数学的には可換のイメージが強いのでこれを例として.
可換でないのは、演算子もオブジェクトのメソッドであるからA == B
に対して主語(A)・目的語(B)の関係が発生するから.
以下のようにExampleクラスで==
をオーバーライドするとオーバーライドした実装が使われるのはExampleオブジェクトを主語として比較されたときのみ.
class Example
def initialize(value)
@value = value
end
def ==(other)
@value == other
end
end
obj = Example.new("test")
obj == "test"
# true
"test" == obj
# false
■疑問点
他の言語も演算子は非可換なのか?
モンキーパッチせずに"test" == obj
をtrueと評価させるのは不可能なのか?