🦔
[Feature #19001] Data で定義したクラスに #to_h を追加する要望
[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
- なんですがこれ自体はすでに実装済みで上記のコードはすでに動作するとのこと
- https://bugs.ruby-lang.org/issues/19001#note-2
-
#to_h
も実装済み
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}]
- と、いうことでこのチケットは閉じられています
Discussion