枚举为Clojure类型实现的协议

时间:2018-11-26 16:16:25

标签: clojure protocols enumerate

如何检索Clojure类型已扩展的协议列表?

1 个答案:

答案 0 :(得分:1)

只需使用supers

(supers (class {})) 

=> #{clojure.lang.AFn java.lang.Iterable java.lang.Runnable 
     clojure.lang.IPersistentMap clojure.lang.IEditableCollection 
     clojure.lang.IObj clojure.lang.MapEquivalence java.io.Serializable 
     clojure.lang.IKVReduce clojure.lang.IMapIterable java.util.Map 
     clojure.lang.APersistentMap clojure.lang.IPersistentCollection 
     clojure.lang.IFn clojure.lang.Associative clojure.lang.Counted 
     clojure.lang.Seqable java.lang.Object clojure.lang.IHashEq 
     clojure.lang.IMeta clojure.lang.ILookup java.util.concurrent.Callable}

如有疑问,您还可以尝试使用The Clojure CheatSheet找到的其他内容。例如:

(parents (class {})) => 
#{clojure.lang.IEditableCollection clojure.lang.IObj
  clojure.lang.IKVReduce clojure.lang.IMapIterable
  clojure.lang.APersistentMap}

(ancestors (class {})) => 
#{clojure.lang.AFn java.lang.Iterable java.lang.Runnable
  clojure.lang.IPersistentMap clojure.lang.IEditableCollection
  clojure.lang.IObj clojure.lang.MapEquivalence java.io.Serializable
  clojure.lang.IKVReduce clojure.lang.IMapIterable java.util.Map
  clojure.lang.APersistentMap clojure.lang.IPersistentCollection
  clojure.lang.IFn clojure.lang.Associative clojure.lang.Counted
  clojure.lang.Seqable java.lang.Object clojure.lang.IHashEq
  clojure.lang.IMeta clojure.lang.ILookup java.util.concurrent.Callable}

(bases (class {})) => 
(clojure.lang.APersistentMap
 clojure.lang.IObj
 clojure.lang.IEditableCollection
 clojure.lang.IMapIterable
 clojure.lang.IKVReduce)

; Mostly synonyms
(class {}) => clojure.lang.PersistentArrayMap
(type  {}) => clojure.lang.PersistentArrayMap