8

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正しいと見なされ、期待されていますか? もしそうなら、理由を説明してください。
  • このようなマップとリストの構造でネストされた要素にアクセスするにはどうすればよいですか?
4

2 に答える 2