演算子オーバーロード
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
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
スポンサーリンク
>> 次の記事 : 配列演算子[], []= を再定義
<< 前の記事 : 論理演算子を用いた代入などのイディオム
- - 関連記事 -
- 配列演算子[], []= を再定義
- 論理演算子を用いた代入などのイディオム
スポンサーリンク