gpt4 book ai didi

clojure - Lein 检查 : case has int tests, 但测试的表达式不是原始的

转载 作者:行者123 更新时间:2023-12-04 12:49:56 26 4
gpt4 key购买 nike

我正在编写标准的高/低猜谜游戏,但带有“AI”(尽管这是一个慷慨的术语)。

下面的函数采用数字范围内的最低和最高数字、先前的猜测和“方向”(表示先前的猜测是否太低、太高或正确),并返回新的要猜测的数字范围。

(defn new-range [min-n max-n guess direction]
(case direction
1 [min-n guess]
-1 [guess max-n]
0 [guess guess]))

当我通过 lein check 运行这个函数时,它给了我一个错误/警告:

case has int tests, but tested expression is not primitive.

并指向(大小写方向

这是什么意思?我搜索了它,但我只能找到对定义此错误的来源的引用。

这是我应该担心的事情吗?我尝试了类型注释 direction,但这并没有改变任何东西。

编辑:事实证明,当我尝试注释 direction 时,我不小心使用了盒装类型的 Long。哎呀。

最佳答案

1、-1 和 0 将是原始长整型。 check 告诉您 arg 方向不是原始 long(可以是 Long 对象)。

类型提示方向 arg 应该修复它:

(defn new-range [min-n max-n guess ^long direction]
(case direction
1 [min-n guess]
-1 [guess max-n]
0 [guess guess]))

或者在这种情况下使用 (long direction) 将方向转换到 long 应该有效:

(defn new-range [min-n max-n guess direction]
(case (long direction)
1 [min-n guess]
-1 [guess max-n]
0 [guess guess]))

我不认为这些行为会有所不同,它只会稍微提高性能。

关于clojure - Lein 检查 : case has int tests, 但测试的表达式不是原始的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40388148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com