_评论:favila_
CLJS 中各种数值谓词的目标应该是什么?
目标是与 CLJ 中这些谓词的意义保持一致吗?如果是这样,那么
{{number?}} 针对 typeof-number 或 goog.math.Integer 或 goog.math.Long
{{integer?}} 针对 goog.math.isInt/Number.isInteger 或 goog.math.Integer 或 goog.math.Long
{{int?}} 针对 goog.math.isInt/Number.isInteger 或 goog.math.Long
目标是要与平台原生的某些概念保持一致吗?如果是这样,那么
{{number?}} 针对 typeof-number 或 goog.math.Integer 或 goog.math.Long
{{integer?}} 针对 goog.math.isInt/Number.isInteger 或 goog.math.Integer 或 goog.math.Long
{{int?}} 针对 goog.math.isInt 仅
目标是进行我可以使用此值进行算术的类型检查吗?如果是这样,那么
{{number?}} 针对 typeof-number 仅
{{integer?}} 针对 goog.math.isInt(或者甚至可能 Number.isSafeInteger)
{{int?}} 与 integer? 相同
在 Java/CLJ 中,这三个目标之间的一致性要强得多。任何以数字为标识的数字都可以用于 clj 算术(因此最宽的检查 {{number?}} 也可以用于算术检查),而 {{int?}} 与宿主的最原始整数值类型(与对象类型)完全对应。
CLJS 缺少一个数字塔,所以这更有趣。
目前,在CLJS中,{{number?}}似乎被设计成一个谓词,用于测试算术是否可行,因此它只允许js中的type-of===number。{{integer?}}也是一个算术检查,但希望是一个非分数的数(有趣的是,它仍然允许不安全的整数,即超出Number.MAX_SAFE_INTEGER的范围,在正常整数算术中不起作用——也许它应该只允许安全的整数)。 {{int?}}不考虑算术,但它仍然可以用来查看一个值是否可能是数值标识符(例如,通过transit接收到的记录id);但这与CLJ的int?所关注的并不是一回事。