5

ネストされたフォームをget多用するコードベースがあります。get-inコードを (あまり) 書き直さずに、ネイティブの JavaScript オブジェクトも使用できるようにしたいと考えています。

js> cljs.user.o = {foo: 42}  // in js console

cljs.user> (get o "foo") ; => 42 ; in cljs console

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)))

機能しているように見えますが、奇妙な方法で多くのことを壊します。

4

1 に答える 1

10

あなたは Object プロトタイプを変更していますが、それをしたくありません。次のほうが良いです:

(extend-protocol ILookup
  object
  (-lookup [m k] (aget m k))
  (-lookup [m k not-found] (or (aget m k) not-found)))
于 2013-06-03T19:17:33.443 に答える