1

我最近开始玩 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和象征键不会这样做。

所以我想知道,是否已经有一个序列化程序可以根据类型检查所有值,并可以为不匹配的类型提供映射器?

4

1 回答 1

1

对于更简单的情况,也许#from_hash可以解决问题。这需要一个字符串键哈希。

如果您当然使用的是导轨,那么您可以查看的另一件事是TypedParams来自gem。sorbet-rails如果没有,也许您可​​以使用TypeCoercefromsorbet-coerce创建一些有用的东西。

于 2021-08-23T21:59:57.197 回答