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