演算子をオーバーライドする

コメントでいただいたので、調べてみました。

mikamisan.hatenablog.com

ruby演算子をオーバーライド(上書き)することができるようです。

対象となる演算子

|  ^  &  <=>  ==  ===  =~  >   >=  <   <=   <<  >>
    +  -  *  /    %   **   ~   +@  -@  []  []=  ` ! != !~

上記はメソッド内でよく見かけるやつですね。

これがないとコードがまともに書けないですね。

演算子をオーバーライドしつつ、前回のメソッド=を代入して使ってみました。

class Greet
  def initialize(words = [])
    @words = words
  end

  def +(word)
    @words << word
  end

  def -(word)
    @words.delete(word)
  end

  def hello=(word)
    p word
  end

  def hello
    p @words
  end
end

greet = Greet.new(%w(foo bar))
greet.hello= 'Hello'"Hello"
greet + 'test'
greet.hello
→["foo", "bar", "test"]
greet - 'foo'
greet.hello
→["bar", "test"]

こんな感じになるのではないでしょうか。

演算子を書き換えることができるのは、C++ぐらい(?)のようですね。

それだけ貴重な書き換えだったとは・・・

いや、実は違うんだ!という方がいたらどんどん突っ込んでくださいm( )m

参考

qiita.com