clojure - 在clojurescript中,如何列出对象的所有协议(protocol)?

标签 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 中有一个列出所有协议(protocol)的函数

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

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

最佳答案

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

关于clojure - 在clojurescript中,如何列出对象的所有协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134649/

相关文章:

macros - 强制扩展 Clojure 宏内的表达式

macros - 在 Clojure 中使用宏

Clojure 相当于 "Actors"

Clojure。向量和列表。缺点和偷看

clojure - core.async pub/sub 在 Om 中表现得很奇怪(clojurescript)

clojure - 在 ClojureScript 中漂亮地打印字符串?

clojure - 为 Compojure 应用程序自动构建 Clojurescript 文件

clojure - 使用 Clojure 或 ClojureScript 将 markdown 转换为 html,包括表格

vim - 如何从 Clojure REPL 评估读取器条件

clojurescript - lein cljsbuild 给出 "Could not write JavaScript nil"错误