Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Structクラスを継承してはいけない(戒め

以前書いたStructで構造体なデータを扱う - Bye Bye Mooreという記事で

class Point < Struct.new(:x, :y)
  def +(other_object)
    Point.new(x + other_object.x, y + other_object.y)
  end  
end

とか書いていました。
が、公式リファレンスには

無名クラスのサブ クラスを作成する方法でカスタマイズする場合は無名クラスが使用されなくなっ てしまうことがあるためです。

との記述があり上記の方法は推奨されません。

どうしても拡張する必要がある場合

Point = Struct.new(:x,:y) do
  def +(other_object)
    Point.new(x + other_object.x, y + other_object.y)
  end  
end

としてあげるのがよいです。