2016-02-16 3 views
1

Я не могу понять, как сравнить строки в Clojure. Учитывая эту основную функцию:Что такое правильный способ сравнения строк в Clojure?

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

я получаю сообщение об ошибке: java.lang.String не может быть приведен к clojure.lang.IFn, когда я вызываю функцию. Каков наилучший способ сравнения строк в Clojure?

+4

Не называть 'username' как функцию: это то, что' (имя пользователя) 'делает. То, как вы сравниваете строки, также * неверно (см. Ответ Криса Мерфи), но ошибка, которую вы получаете, задолго до того, как вы попытаетесь ее сравнить. Просто используйте 'username' без парнеров. – amalloy

ответ

7

Сообщение об ошибке, которое вы получаете, связано с тем, что username, входящий в вашу функцию, является строкой, и вы пытаетесь ее вызывать (без каких-либо параметров). Вам совсем не нужна форма let. Вместо x положить username.

Все неизменные значения реагируют на использование =:

(= username "John")

= фактически проверяет значение, а не какой-то «в указатель памяти» понятие.

Смежные вопросы