我想要一个用 Clojure 编写的函数,用于检查给定的 String 是否大于给定的数字,如果是,则我的函数为 true,否则为 false。现在我想出了以下代码,但它给出了以下错误:ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn user/checker (form-init1692807253513002836.clj:1)
我想出的代码是:
(defn checker [str, num]
(cond
(> (count str) num) "True"
:else "False"
)
)
(checker "test" 6)
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么 count str 被视为 Long 和/或如何修复此函数吗?
您可能希望通过考虑一些适用于您的代码段的 Clojure 习语来“修复”您的函数:
内置布尔值;无需使用"True"
/"False"
字符串(除非您只是将它们用作其他内容的占位符示例)
不需要明确返回布尔值,因为>
已经返回了一个布尔值
您正在测量“长度”而不是“大”,因此请使用描述性的函数名称;strlen
可能很常见
因为布尔返回值你可以结束 ?
可能避免str
作为 var 名称
考虑到这些,您的功能可以简化为:
(defn strlen-exceeds? [s n]
(< n (count s)))
Run Code Online (Sandbox Code Playgroud)
(现在它足够短,您甚至可能不需要将它作为显式函数。)