2013-10-30 29 views
2

我的书 “Web开发使用Clojure” 跑短的示例代码:短的Clojure代码返回错误结果

(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))的条件实际上是满意的。

回答

2

你的示例使用destructuring,所以预计HashMap的连键:id:passpass1作为它的一个参数:

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

更新

我发现了一个blog post about destructuring。它比官方文档更好地解释了解构。

+0

感谢列昂尼德,它的工作原理。 – Pauli