我想要一个用 Clojure 编写的函数来检查我给定的字符串是否大于我给定的数字,如果是,我的函数判断为真,否则判断为假。 现在我想出了以下代码,但它给出了以下错误: 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 和/或如何修复此函数?
最佳答案
您可能想通过考虑一些 Clojure 来“修复”您的函数 适用于您的代码段的成语:
内置 bool 值;无需使用
"True"
/"False"
字符串 (除非您只是将这些用作占位符示例 别的)自
>
以来不需要明确返回 bool 值 已经返回一个 bool 值您测量的是“长度”而不是“大小”,因此请使用 描述性函数名称;
strlen
可能很常见因为 bool 返回值可以以
?
结尾可能会避免
str
作为变量名将比较顺序切换为使用
<
而不是>
, 基于 Elements of Clojure推荐
考虑到这些,您的函数可以简化为:
(defn strlen-exceeds? [s n]
(< n (count s)))
(现在它已经足够短了,你甚至可能不需要它成为一个 明确的功能。)
关于clojure - 在 Clojure 中使用变量检查字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46675694/