是否有文档化的方法来查找Clojure对象实现的协议?另一种方式(显示给定协议扩展的类)很简单:(扩展程序协议).
我最终得到了以下实现:
(defn protocol? [maybe-p]
(boolean (:on-interface maybe-p)))
(defn all-protocols []
(filter #(protocol? @(val %)) (ns-publics *ns*)))
(defn implemented-protocols [sym]
(filter #(satisfies? @(val %) sym) (all-protocols)))
Run Code Online (Sandbox Code Playgroud)
首先,它查找当前命名空间中的所有符号(当然,您可以将其扩展到所有命名空间),无论它们是协议定义还是网络(所有协议).接下来,如果满足其中一个协议,则查找给定符号.
协议?函数使用:on-interface键,没有记录afaik,所以这个函数不可移植.
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |