2013-11-22 15 views
2

我已经定义,列出类型的函数在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

回答

2

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

相关问题