30

「def」を使用して var を更新する場合と「alter-var-root」を使用する場合の違いは何ですか? 例えば

(def x 3)
(def x (inc x))

(def x 3)
(alter-var-root #'x inc)
4

3 に答える 3

22

alter-var-root関数の適用に関してアトミックであることの付加価値を提供します。2 ずつ増加する 2つの (場合によっては同時の)(alter-var-root #'foo inc)保証の適用。foo

その(def x (inc x))ような保証はありません。x値の読み取りと更新された値の書き込みの間に、他のスレッドによって行われた変更を上書きする可能性があります。

一方、alter-var-rootアトミック性のために使用している場合は、vars よりもアトムの方がユースケースに適している可能性があります。

于 2013-05-09T08:23:28.997 に答える