LoginSignup
2
2

More than 5 years have passed since last update.

Rubyの加法演算子や等値演算子は可換ではない

Posted at

加法演算子(+)、等値演算子(==)に限らずすべての演算子は可換でないと言えると思うけど、加法・等値は特に数学的には可換のイメージが強いのでこれを例として.

可換でないのは、演算子もオブジェクトのメソッドであるから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と評価させるのは不可能なのか?

2
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2