如何在 clojurescript 中制作 IDerefable?

Fra*_*awr 4 clojure clojurescript

有没有办法通过实现 IDeref 在 cljs 中创建另一个容器,就像在 clojure 中一样?

(reify clojure.lang.IDeref
     (deref [_] ...))
Run Code Online (Sandbox Code Playgroud)

编译器警告 IDeref 不是协议

edb*_*ond 5

尝试这个:

(def a
  (reify IDeref
    (-deref [_] "Hello!")))

(.log js/console @a)
Run Code Online (Sandbox Code Playgroud)

输出“你好!”。您可能想使用 deftype:

(deftype LikeAtom []
  IDeref
  (-deref [_] "Hello!"))

(.log js/console @(LikeAtom.))
Run Code Online (Sandbox Code Playgroud)