Ada*_*deg 4 protocols clojurescript
我有一个代码库,它大量使用get和get-in嵌套表单.我希望能够使用本机javascript对象,没有(很多)代码重写.
js> cljs.user.o = {foo: 42} // in js console
cljs.user> (get o "foo") ; => 42 ; in cljs console
Run Code Online (Sandbox Code Playgroud)
由于我只查询表单,但不修改它们,我认为它足以实现get(get-in依赖于它).这是我的尝试,
(extend-protocol ILookup
js/Object
(-lookup [m k] (aget m k))
(-lookup [m k not-found (or (aget m k) not-found)))
Run Code Online (Sandbox Code Playgroud)
它似乎有效,但它以一种奇怪的方式打破了很多东西.
你正在修改Object原型,你不想这样做,以下是更好的:
(extend-protocol ILookup
object
(-lookup [m k] (aget m k))
(-lookup [m k not-found] (or (aget m k) not-found)))
Run Code Online (Sandbox Code Playgroud)