欢迎!请参考关于页面了解更多有关此功能的信息。
ClojureScript会将像{:person/weight 200.0}这样的数值类型,以JavaScript的唯一数值类型Number来表示。当这种记录用transit序列化时,transit会将其视为Number: 200并以整数形式打包,然后其他平台(例如JVM)会将该值解包为整数,而不是浮点数,如果Datomic这样的系统在遇到意外的类型时不会崩溃,除非我根据一个规定:person/weight 是:db.type/float 的模式预先处理这些值。
这是transit的设计缺陷吗?transit应该改变以允许我指定类型,并/或通过与模式提供程序的(spec)集成来选择正确的类型吗?
我只是想重申您的问题,我认为您是在问,transit-cljs(实际上是transit-js)是否有一种方法可以强制将JavaScript数字200.0编码为transit的“浮点十进制”基础类型?(这并不是真正的transit-format问题,因为transit本身具有表示固定和任意精度整数和浮点数的能力。所以,这实际上是特定语言的编码器问题。)
我认为答案是否定的(但我并不是这个领域的js专家)。transit-js/transit-cljs只支持编码transit基基数类型i(整数,有符号64位)或f(任意精度小数)。我不知道,但我猜想这可能是因为难以判断一个数字是否可以以浮点小数形式表示。
可能允许你强制这样做,但我认为最好的讨论地点可能是https://github.com/cognitect/transit-js#或https://github.com/cognitect/transit-cljs#。