2024 Clojure发展调查中分享您的观点!

欢迎!请查看关于页面以了解更多如何使用本站的信息。

0
Spec

{{clojure.spec/double-in}} 定义了一种规范,用于测试一个双精度浮点数是否大于或等于最小值,且小于或等于最大值。这在数学和实际应用的视角来看似乎是任意选择。有时您需要测试一个双精度浮点数是否大于最小值或小于最大值。例如:应用程序将在稍后除以检测到的双精度浮点数。

我们当然可以向 {{double-in}} 添加测试,例如:

(s/and (s/double-in :min 0.0 :max 1.0) #(not= 0.0 %))}

但是

`

(and (> % 0.0) (<= % 1))

`

如果不需要 {{double-in}} 的 {{NaN}} 和 {{Infinity}} 测试,则可能更清晰。

为什么不有一个界面可用于所有四个区间测试?与其有四个不同的规范函数,这是一个选择,我建议添加两个关键词到 {{double-in}}。当为 true 时,这些关键词将改变 >= 或 <= 测试为 > 或 < 测试

{{:min-greater}}

(or? :min+, :min-greater-than, :greater-than-min, :strict-min, :min-open, 或可能 :infinmum, :inf,但这可能会产生误导)

{{:max-less}}

(or :max- :max-less-than, :less-than-max, :strict-max, :max-open, 或可能 :supremum, :sup 等.)

例如

(s/valid? (s/double-in :min 0.0 :max 0.1 :min-greater true) 0.0)

将返回 {{false}},但是

(s/valid? (s/double-in :min 0.0 :max 0.1 :min-greater false) 0.0)

将返回 {{true}}。

这些关键词的默认值可能应该是 false,以便与当前 {{double-in}} 的定义保持兼容。

1 个回答

0
参考:https://clojure.atlassian.net/browse/CLJ-1984(由 alex+import 报告)
...