Перечислите протоколы, реализованные для типа Clojure - PullRequest
0 голосов
/ 26 ноября 2018

Как получить список протоколов, с которыми был расширен тип Clojure?

1 Ответ

0 голосов
/ 26 ноября 2018

Просто используйте 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
...