在Clojure中比较字符串的正确方法是什么?

在Clojure中比较字符串的正确方法是什么?,clojure,Clojure,我不知道如何在Clojure中比较字符串。鉴于这一基本功能: (defn login [username] (let [x (username)] (if (identical? x "John") "Welcome" "incorrect username"))) 我一直收到这样的错误消息:调用该函数时,java.lang.String不能转换为clojure.lang.IFn。在Clojure中比较字符串的最佳方法是什么?您收到的错误消息是因为进入函数的用户

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

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

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

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

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

(=用户名“John”)


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

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

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

(=用户名“John”)


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

不要将
用户名
作为函数调用:这就是
(用户名)
的作用。比较字符串的方式也是错误的(请参阅Chris Murphy的答案),但在您实际尝试比较字符串之前,您就会遇到错误。只需使用
username
而不使用parens。不要将
username
作为函数调用:这就是
(username)
所做的。比较字符串的方式也是错误的(请参阅Chris Murphy的答案),但在您实际尝试比较字符串之前,您就会遇到错误。只需使用
用户名
,无需密码。