【问题标题】:What is proper way of comparing strings in Clojure?在 Clojure 中比较字符串的正确方法是什么?
【发布时间】:2016-02-16 13:02:24
【问题描述】:

我不知道如何在 Clojure 中比较字符串。鉴于此基本功能:

(defn login [username]
  (let [x (username)]
    (if (identical? x "John")
     "Welcome"
     "incorrect username")))

我不断收到此错误消息:当我调用该函数时,java.lang.String 无法转换为 clojure.lang.IFn。在 Clojure 中比较字符串的最佳方法是什么?

【问题讨论】:

  • 不要将username 作为函数调用:(username) 就是这样做的。您比较字符串的方式是错误的(请参阅 Chris Murphy 的回答),但您得到的错误早在您真正尝试比较它之前。只需使用不带括号的username

标签: clojure


【解决方案1】:

您收到的错误消息是因为进入您的函数的username 是一个字符串,并且您正在尝试调用它(没有任何参数)。您根本不需要let 表单。而不是x 而是username

所有不可变的值都使用=进行响应:

(= username "John")

= 实际上检查的是值,而不是一些“内存指针”的概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多