[Ruby]Dataクラス

DataクラスはRuby3.2で導入された

Structと似ているが、違う点は書き換え不可であること

コードは以下のブログから引用

プロと読み解く Ruby 3.2 NEWS - クックパッド開発者ブログ

Point = Data.define(:x, :y)
pt = Point.new(1, 2)

p pt.x    #=> 1
p pt.y    #=> 2

# 書き換えはできない
pt.x = 3  #=> undefined method `x=' for #<data Point x=1, y=2> (NoMethodError)

# []でフィールドを読み出せない
pt[:x]    #=> undefined method `[]' for #<data Point x=1, y=2> (NoMethodError)

# newで引数が足りないとエラー
Point.new(1) #=> missing keyword: :y (ArgumentError)

一部のフィールドだけ置き換えた新しいインスタンスを作る場合 Data#with を使う

pt2 = pt.with(x: 3)

p pt2 #=> #<data Point x=3, y=2>