配列演算子[], []= を再定義

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
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
スポンサーリンク
 
スポンサーリンク