演算子オーバーロード

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

Rubyの演算子の多くは、実はインスタンスメソッドとして実装されています。
ですので、新たに定義して意味を変えることができます。
C++でいう演算子のオーバーロード(のようなこと)ができるわけです。

スポンサーリンク

再定義できない演算子: ! && || .. … ?: not = and or

上記以外の演算子は、再定義可能です。
ここでは、2点間(x, y座標)の距離を求めるDistanceクラスを作って、「-」演算子を再定義してみます。

class Distance
    attr_reader :x, :y
    def initialize(x, y)
        @x, @y = x.to_f, y.to_f
    end
    def -(other)
        Math.sqrt((@x - other.x) ** 2 + (@y - other.y) ** 2)
    end
end
 
pt1 = Distance.new(3, 5)
pt2 = Distance.new(8.2, 16.7)
 
p pt1
p pt2
p pt2 - pt1        # 2点間の距離算出

実行結果。

#<Distance:0x2940078 @y=5.0, @x=3.0>
#<Distance:0x293ffb0 @y=16.7, @x=8.2>
12.8035151423349
スポンサーリンク
 
スポンサーリンク