2

我希望能够(js-obj)像哈希映射一样使用,以便

 (def a (js* "{'a': 1, 'b':2}"))

 (a :a)
 ;=> 1

我试过这样做:

 (extend-type object
   IFn
   (-invoke
     ([o k] (aget o (strkey k))))

但它没有用。

4

1 回答 1

1

您可以使用reify. 请注意,这意味着您将无法直接访问这些属性:

(defn convert [obj]
  (reify
    IFn
    (-invoke [obj]
      ([o k] (aget o (strkey k))))))

当然,您可以编写一个协议,以便您可以根据需要访问原始对象。

于 2013-05-21T12:53:21.410 回答