У меня есть атом (в ClojureScript):
(def player
(atom {:episode 0 ...}))
И я хочу увеличить :episode
на единицу:
(swap! player update :episode inc)
Это прекрасно работает в Lein REPL.
Однако при запуске выдается:
mfp.js:5808 Uncaught Error: No protocol method IDeref.-deref defined for type cljs.core/PersistentHashMap: ...
at Object.cljs$core$missing_protocol [as missing_protocol] (mfp.js:5808)
at Object.cljs$core$_deref [as _deref] (mfp.js:7268)
at cljs$core$deref (mfp.js:9396)
at mfp$update (mfp.js:36808)
at mfp.js:18388
at Function.cljs.core.swap_BANG_.cljs$core$IFn$_invoke$arity$4 (mfp.js:18389)
at cljs$core$swap_BANG_ (mfp.js:18341)
at mfp$next_episode (mfp.js:36946)
at HTMLAnchorElement.<anonymous> (mfp.js:36920)
Я могу обойти это, используя более длинную форму:
(swap! player assoc :episode (+ 1 (@player :episode)))
Однако я хотел бы знать, почемуПервая форма не работает.Спасибо.