我想要一个用Clojure编写的函数来检查我给定的String是否大于给定的数字,如果是,我的函数说明为true,否则表示为false。 现在我提出了以下代码,但它给出了以下错误: ClassCastException java.lang.Long无法强制转换为clojure.lang.IFn用户/检查器(form-init1692807253513002836.clj:1)
我提出的代码是:
(defn checker [str, num]
(cond
(> (count str) num) "True"
:else "False"
)
)
(checker "test" 6)
有人可以解释为什么count str被认为是Long和/或如何修复这个函数?
答案 0 :(得分:2)
你可能想通过考虑一些Clojure来“修复”你的功能 适用于您的代码段的习语:
内置布尔值;无需使用"True"
/ "False"
字符串
(除非你只是将它们作为占位符示例使用
别的东西)
自>
以来,不需要明确回归布尔值
已经返回一个布尔值
你测量的是“长度”而不是“大”,所以使用a
描述性功能名称; strlen
可能很常见
由于布尔返回值,您可以使用?
可能会将str
作为var name
考虑到这些,您的功能简化为:
(defn strlen-exceeds? [s n]
(> (count s) n))
(现在它足够短,你可能甚至不需要它成为一个 显性功能。)
答案 1 :(得分:0)
我认为您的代码应该有效,但对于这种情况,请不要使用cond
使用if
。
(defn checker [str, num]
(if (> (count str) num)
"True"
"False"))
> (checker "a" 1)
"False"
> (checker "a" 2)
"False"
> (checker "ab" 2)
"False"
> (checker "ab" 2)