🦔

[Feature #19001] Data で定義したクラスに #to_h を追加する要望

2024/06/18に公開

[Feature #19001] Data: Add #to_h symmetric to constructor with keyword args [Follow-on to #16122 Data: simple immutable value object]

  • Data クラスに #to_h を追加することで対称的に変換を行いたい要望
  • どういうことかというと次のように一旦 Hash オブジェクトに変換した後に Data で定義したクラスに変換するようなイメージ
Point = Data.define(:x, :y, :z)

points = [
  Point.new(x: 1, y: 0, z: 0),
  Point.new(x: 0, y: 1, z: 0),
  Point.new(x: 0, y: 0, z: 1),
]

# ここで一度 Hash オブジェクトにする
hashes = points.map(&:to_h)

# Hash オブジェクトから Point に戻す
points_2 = hashes.map { |h| Point.new(**h) }

points_2 == points
#=> true
Point = Data.define(:x, :y, :z)

points = [
  Point.new(x: 1, y: 0, z: 0),
  Point.new(x: 0, y: 1, z: 0),
  Point.new(x: 0, y: 0, z: 1),
]

hashes = points.map(&:to_h)
pp hashes
# => [{:x=>1, :y=>0, :z=>0}, {:x=>0, :y=>1, :z=>0}, {:x=>0, :y=>0, :z=>1}]
  • と、いうことでこのチケットは閉じられています
GitHubで編集を提案

Discussion