読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

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