我知道 Clojure 中的列表和向量在大多数情况下几乎可以互换使用。这是一个让我惊讶的简单案例
(nth [2 4] 0) ;=> 2
(nth '(2 4) 0) ;=> 2
(get [2 4] 0) ;=> 2
(get '(2 4) 0) ;=> nil -- wtf???
会谈的文档get
映射一个键,但它适用于向量或集合就好了。nth
甚至提到的文档,get
仅在边缘情况下谈论它们的差异。
我遇到这种奇怪行为的实际情况是我加载了一个 yaml 文件。它导致了地图和列表的嵌套结构。我想用get-in
.
(def form (parse-yaml some-yaml-file))
(def best-friend (get-in form [:friends 0 :first-name]))
它不起作用,因为在内部get-in
使用get
。所以我有一个理论和实际的问题:
- 这种行为被
get
认为是正确的和预期的吗?如果是这样,请解释原因。 - 如何访问这种地图和列表结构中的嵌套元素?