一个简短的Clojure代码返回错误的结果

时间:2013-10-30 07:47:10

标签: clojure

我在“使用Clojure进行Web开发”一书中运行了一个简短的示例代码:

(defn login [{:keys [id pass pass1] :as user}]
    (if (and id (= pass pass1))
        (println "valid user")
        (println user " is not filled in correctly")))

我试过了:

(login {:keys ["tom" "123" "123"] :as "tom"})

得到了:

{:as tom, :keys [tom 123 123]}  is not filled in correctly
nil

为什么会这样?条件(and id (= pass pass1))实际上已得到满足。

1 个答案:

答案 0 :(得分:2)

您的示例使用destructuring,因此它需要使用键:id:passpass1作为其单个参数的hashmap:

(login {:id "tom" :pass "123" :pass1 "123"})

更新

我找到了blog post about destructuring。它解释了比官方文档更好的解构。