我最近开始玩 Sorbet 并偶然发现了T::Struct,它似乎对类型安全值的对象非常有用。
一个例子可能是:
class Order < T::Struct
prop :order_id, String
prop :amount, Integer
prop :currency, String
prop :submitted_at, DateTime
end
然后可以通过以下方式轻松实例化:
order = Order.new(order_id: "ORD-001", amount: 100, currency: "USD", submitted_at: DateTime.now)
但是,我也想将这些对象保存在文件或数据库中。幸运的是,序列化为 json 非常简单:
File.open("#{order.order_id}.json", "wb"){|f| f.write(order.to_json)}
但是当涉及到反序列化时,它变得非常棘手(对于 JSON),因为日期被保存为字符串。做 aJSON.load
和象征键不会这样做。
所以我想知道,是否已经有一个序列化程序可以根据类型检查所有值,并可以为不匹配的类型提供映射器?