我在“使用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))
实际上已得到满足。
答案 0 :(得分:2)
您的示例使用destructuring,因此它需要使用键:id
,:pass
和pass1
作为其单个参数的hashmap:
(login {:id "tom" :pass "123" :pass1 "123"})
我找到了blog post about destructuring。它解释了比官方文档更好的解构。