为什么原子 没有实现 "ISwap" 协议?
这是 swap!
的 实现
(defn swap!
([a f]
(if (instance? Atom a)
(reset! a (f (.-state a)))
(-swap! a f))))
这并不是关于优化,因为 GCC 没有内联 swap!
调用。
;; clj -m cljs.main --optimizations advanced -co '{:pseudo-names true}' -c example.core
(let [a (atom 0)]
(swap! a inc)
(js/console.log @a))
var $a_528$$ = new $cljs$core$Atom$$;
$cljs$core$swap_BANG_$$.$cljs$core$IFn$_invoke$arity$2$($a_528$$, function($x$jscomp$125$$) {
return $x$jscomp$125$$ + 1
});
console.log($cljs$core$_deref$$($a_528$$));