:name
のようなキーワードまたは[:person :name]
のようなキーワードになる関数の引数をサポートするためのClojureのきれいな方法は、Clojureの呼び出しで使用できるようにするget
またはget-in
?Clojure fnのget-inのキーワードまたはパス引数のサポート
今私は(get-in m (flatten [path]))
を入力しています。path
が入力されています。これは動作しますが、頻繁に使用するために遅くなったり、大量のデータが集まったりしているように思えます。私はベンチマークを行っていません。
代わりに、私は私がget
またはget-in
を使用する(coll? path)
に派遣ことができると思います:それは、より効率的であるかもしれないよう
(let [path [:person :name]
m {:person {:name "John Smith"}}]
(if (coll? path)
(get-in m path)
(get m path)))
=> {:name "John Smith"}
は思えます。
あいまいさについての良い点。別のオプションは、korksをサポートすることです。 '(my-fn [:foo:bar])'と '(my-fn:foo:bar)'の両方をサポートする '[&path]'として解析される ''(my-fn:some:path) 。 –
@pate可変引数を使うことができれば、是非それをしてください。基本的には、シーケンスを渡すための構文的な砂糖ですが、ここではあいまいさがありません。 –
'(get-in m [[:foo:bar]:more:bars])'、no( '' foo:bar:more:bar) ''という結果になる ' ? –