2015-02-05 47 views
2

这些中哪一个比较习惯Clojure?从Clojure中的嵌套结构中获取的习惯性方法

(def book {:title "Joy of Clojure" 
      :authors ["Michael Fogus" "Chris Houser"]}) 

(get-in book [:authors 0]) 
;; => "Michael Fogus" 

(-> book :authors first) 
;; => "Michael Fogus" 

当我有更复杂的数据结构,这变得更相关。据推测,两者之间没有技术上的区别?

回答

6

get-in适用于嵌套结构,因为许多有趣的键不可调用,特别是向量中的索引(firstsecond除外)或散列映射中的字符串键。

user=> (get-in [{:a 0} 1 nil "unknown" {:b {"context info" 42}}] [4 :b "context info"]) 
42 
+2

还允许您指定一个默认值,如果关键是不是字符串键现在 – RedDeckWins 2015-02-05 15:33:03

+0

好一点的地图,没想到 – Conan 2015-02-05 16:44:38

+2

另外值得一提的是'得到-in'只与关联结构工程,所以如果你在地图上有一个seq,你最好使用线程宏 – Conan 2015-02-05 17:02:49