检查multimethod在Clojure中是否有特定的调度

szy*_*ski 1 clojure

我有一个多方法:

(defmulti foo type)
(defmethod foo clojure.lang.Keyword [k] (name k))
Run Code Online (Sandbox Code Playgroud)

我想知道这样的事情是否可行:

(valid-dispatch? foo clojure.lang.Keyword)
;;=> true
Run Code Online (Sandbox Code Playgroud)

Mic*_*zyk 5

如果您想知道是否存在精确给定调度值的方法:

(contains? (methods foo) clojure.lang.Keyword)
Run Code Online (Sandbox Code Playgroud)

如果您想知道是否存在与给定调度值匹配的方法(考虑多方法使用的层次结构):

(get-method foo clojure.lang.Keyword)
Run Code Online (Sandbox Code Playgroud)

如果可用,后者返回实际方法,nil否则返回.