在clojurescript中,如何列出对象的所有协议?

时间:2013-11-22 00:22:35

标签: clojure clojurescript

我已经定义了一个列出类型

的函数
(defn js-type [o]
   (let [ty (type o)
        ty (if (and ty (.-cljs$lang$type ty))
             (.-cljs$lang$ctorStr ty)
            (js/goog.typeOf o))]
  ty))

使用

(js-type (keys {:a 1})) ;=> "cljs.core/KeySeq"

我想在clojurescript中有一个列出所有协议的函数

(js-protocols (keys {:a 1})) ;=> [Object, IMeta, IWithMeta .... INext ] 

KeySeq的所有协议都在这里:https://github.com/clojure/clojurescript/blob/master/src/cljs/cljs/core.cljs#L5881-L5932

1 个答案:

答案 0 :(得分:2)

这是运行时不存在的另一个反射工具。您可以通过查看cljs.analyzer/namespaces的内容或直接通过ClojureScript分析器/编译器通过宏获取此信息。