clojure - 在 Clojure 中使用变量检查字符串长度

标签 clojure

我想要一个用 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/

相关文章:

clojure - 在 Clojure 序列中修剪循环的不显眼的方法

function - Clojure 函数的更惯用和优雅的方式

clojure - 如何对向量中的每个项目进行操作并引用 Clojure 中的先前值?

math - Clojure 矩阵表示

java - Clojure REPL 未在 Windows 命令提示符下启动

clojure - 在 clojure 中删除重复项

clojure - 如何在 clojure 中交换深层嵌套向量中的所有元素对?

apache - 可以使用 Apache Tomcat 的 Lisp 方言吗?

clojure - 在 Leiningen 下追踪 Clojure UI 应用程序中的 AWT 异常

postgresql - Clojure Korma 可以在 Postgres 中生成 WITH - RETURNING 查询吗?