2017-01-05 10 views
1

私はいくつかのQuil examplesを見ている、と(「ハイパー」と「均衡」の例のための)2人の異なる著者が使用していることに気づいたために対単純なの機能更新で​​非ネストされた構造

(update s :x + dx vx) 

これには理由がありますか? sが深くネストされた構造だった場合、それは理にかなっています。どちらの場合もかかわらず、キーのリストは、私だけにして、上記2つのスニペットが同等に見える、1件のエントリーがあります。そのupdate-in除き

(let [dx 1 
     vx 2 
     s {:x 5}] 
    (println (update-in s [:x] + dx vx)) 
    (println (update s :x + dx vx))) 

{:x 8} 
{:x 8} 

はおそらく、もう少しのオーバーヘッドを持っています。

私が考えることができる唯一の理由は、将来彼らが状態を入れ子にすると、移行が楽になるということだけです。しかし、このような単純な例では、これは起こりそうもなく、特にどこにでも魔法の定数があることを考えると、

update-inupdate以上にネストされていない使用する理由はありますか?

答えて

1

非入れ子構造にupdate-inを使用する理由はなく、updateが優先されます。

2

look at the source codeの場合は、両方ともカバーの下にassocと表示されます。近くのコードや関連コードを考慮して、スタイルとコードの明瞭性を除いて、もう一方を優先する理由はありません。

また、Clojure 1.7まではupdateが追加されていませんでした。これは選択肢の役割を果たします。

P.S.あなたが欠けている機能を探しているならばdissoc-in、それはin the Tupelo libraryです。

+2

(a)ここでは、ディソクが関連性があるのはなぜですか? (b)あなた自身の図書館を使用することを提案する場合は、それが自分のものであることを明確に示してください。 – amalloy

関連する問題