配列演算子[], []= を再定義
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
演算子オーバーロードで作った2点間の距離を求めるクラスを拡張して、インスタンス変数@x, @yに、pt[0], pt[1]でアクセスでき、[]=で代入できるようにします。
スポンサーリンク
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 # 配列参照の演算子を再定義 def [](index) case index when 0 @x when 1 @y else raise ArgumentError, "#{index} is out of range" end end # 配列代入の演算子を再定義 def []=(index, value) case index when 0 @x = value when 1 @y = value else raise ArgumentError, "#{index} is out of range" end end end pt1 = Distance.new(3, 5) pt2 = Distance.new(8.2, 16.7) p pt1[1] p pt2[0] p pt2 - pt1 # 2点間の距離算出 pt2[0] = 10 pt2[1] = 8 print pt2[0], ", ", pt2[1], "\n" p pt2 - pt1 # pt2変更後の2点間の距離算出
実行結果。
5.0 8.2 12.8035151423349 10, 8 7.61577310586391
スポンサーリンク
<< 前の記事 : 演算子オーバーロード
- - 関連記事 -
- 演算子オーバーロード
- 論理演算子を用いた代入などのイディオム
スポンサーリンク