2016-10-07 36 views
0

以下兩種形式有什麼區別?[{:keys [:a]}]還是[{:keys [a]}]更習慣性的解構?

(defn abc [{:keys [:a]}] a) 
(defn abc [{:keys [a]}] a) 

是否有一個更習慣?

+2

我會爭論,用符號(第二個例子)基本上是唯一一個與':syms'和':strs'一起工作的例子(例如'(let [{:strs [「a」]} {「a」1}] a )'' – cfrick

回答

1

地圖解構與:我們通常使用符號來完成鍵,就像你的第二個例子。

我不能完全肯定這種說法,但我認爲支持在關鍵字:鑰匙是專門添加到支持與命名空間別名命名空間解構關鍵字的情況下,那就是:

(ns (require [com.company.foo :as foo] 
      ...)) 

(defn abc [{:keys [::foo/a]}] a) 
+2

'(讓[{:keys [foo/a]} {:foo/a 1}] a)=> 1' – OlegTheCat

+2

注意:foo/a和:: foo/a不一樣。在我的情況下,foo是一個名稱空間別名。我不知道這是否在最新版本的clojure中發生了變化,但上次我檢查了foo:foo/a不檢查別名(在::中) – Setzer22

+2

在1.9中,您可以使用'(let [ {:foo/keys [a]}#:foo {:a 1}] a); => 1'語法。 – madstap