2

我正在“使用 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))实际上是满足的。

4

1 回答 1

2

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

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

更新

我发现了一篇关于解构的博客文章。它比官方文档更好地解释了解构。

于 2013-10-30T07:52:14.647 回答