(add-aux-method method-table qualifier dispatch-value f)
Add an auxiliary method implementation for qualifer
(e.g. :before
) and dispatch-value
. Unlike primary
methods, auxiliary methods are not limited to one method per dispatch value; thus this method does not remove
existing methods for this dispatch value. existing
Add an auxiliary method implementation for `qualifer` (e.g. `:before`) and `dispatch-value`. Unlike primary methods, auxiliary methods are not limited to one method per dispatch value; thus this method does not remove existing methods for this dispatch value. existing
(add-primary-method method-table dispatch-value f)
Set the primary method implementation for dispatch-value
, replacing it if it already exists.
Set the primary method implementation for `dispatch-value`, replacing it if it already exists.
(allowed-qualifiers method-combination)
The set containg all qualifiers supported by this method combination. nil
in the set means the method
combination supports primary methods (because primary methods have no qualifier); all other values refer to
auxiliary methods with that qualifer, e.g. :before
, :after
, or :around
.
(allowed-qualifiers (clojure-method-combination)) ;-> #{nil} (allowed-qualifiers (clos-method-combination)) ;-> #{nil :before :after :around} (allowed-qualifiers (doseq-method-combination)) ;-> #{:doseq}
The set containg all qualifiers supported by this method combination. `nil` in the set means the method combination supports primary methods (because primary methods have no qualifier); all other values refer to auxiliary methods with that qualifer, e.g. `:before`, `:after`, or `:around`. (allowed-qualifiers (clojure-method-combination)) ;-> #{nil} (allowed-qualifiers (clos-method-combination)) ;-> #{nil :before :after :around} (allowed-qualifiers (doseq-method-combination)) ;-> #{:doseq}
(aux-methods method-table)
Get a qualifier -> dispatch-value -> [fn]
map of all auxiliary methods associated with this method table.
Get a `qualifier -> dispatch-value -> [fn]` map of all auxiliary methods associated with this method table.
(cache-method! cache dispatch-value method)
Cache the effective method for dispatch-value
in this cache.
Cache the effective method for `dispatch-value` in this cache.
(cached-method cache dispatch-value)
Return cached effective method for dispatch-value
, if it exists in the cache.
Return cached effective method for `dispatch-value`, if it exists in the cache.
(clear-cache! cache)
Empty the contents of the cache in-place.
Empty the contents of the cache in-place.
(combine-methods method-combination primary-methods aux-methods)
Combine a sequence of matching primary-methods
with aux-methods
(a map of qualifier -> sequence of methods)
into a single effective method.
Combine a sequence of matching `primary-methods` with `aux-methods` (a map of qualifier -> sequence of methods) into a single effective method.
(default-dispatch-value dispatcher)
Default dispatch value to use if no other dispatch value matches.
Default dispatch value to use if no other dispatch value matches.
(dispatch-value dispatcher)
(dispatch-value dispatcher a)
(dispatch-value dispatcher a b)
(dispatch-value dispatcher a b c)
(dispatch-value dispatcher a b c d)
(dispatch-value dispatcher a b c d more)
Return an appropriate dispatch value for args passed to a multimethod. (This method is equivalent in purpose to the dispatch function of vanilla Clojure multimethods.)
Return an appropriate dispatch value for args passed to a multimethod. (This method is equivalent in purpose to the dispatch function of vanilla Clojure multimethods.)
(dispatcher multifn)
Get the dispatcher associated with this multifn.
Get the dispatcher associated with this multifn.
(effective-method multifn dispatch-value)
Return the effective method for dispatch-value
. The effective method is a combined primary method and
applicable auxiliary methods that can be called like a normal function. effective-method
is similar in purpose
to get-method
in vanilla Clojure multimethods; a different name is used here because I felt get-method
would
be ambiguous with regards to whether it returns only a primary method or a combined effective method.
Return the effective method for `dispatch-value`. The effective method is a combined primary method and applicable auxiliary methods that can be called like a normal function. `effective-method` is similar in purpose to `get-method` in vanilla Clojure multimethods; a different name is used here because I felt `get-method` would be ambiguous with regards to whether it returns only a primary method or a combined effective method.
(empty-copy cache)
Return an empty copy of the same type as this cache, e.g. for use when copying a multifn.
Return an empty copy of the same type as this cache, e.g. for use when copying a multifn.
(matching-aux-methods dispatcher method-table dispatch-value)
Return a map of aux method qualifier -> sequence of applicable methods for dispatch-value
, sorted from
most-specific to least-specific.
Return a map of aux method qualifier -> sequence of applicable methods for `dispatch-value`, sorted from most-specific to least-specific.
(matching-primary-methods dispatcher method-table dispatch-value)
Return a sequence of applicable primary methods for dispatch-value
, sorted from most-specific to
least-specific. The standard dispatcher also checks to make sure methods in the sequence are not
ambiguously specific, replacing ambiguous methods with ones that will throw an Exception when invoked.
Return a sequence of applicable primary methods for `dispatch-value`, sorted from most-specific to least-specific. The standard dispatcher also checks to make sure methods in the sequence are not ambiguously specific, replacing ambiguous methods with ones that will throw an Exception when invoked.
(method-combination multifn)
Get the method combination associated with this multifn.
Get the method combination associated with this multifn.
(method-table multifn)
Get the method table associated with this multifn.
Get the method table associated with this multifn.
(prefer-method dispatcher dispatch-val-x dispatch-val-y)
Prefer dispatch-val-x
over dispatch-val-y
for dispatch and method combinations.
Prefer `dispatch-val-x` over `dispatch-val-y` for dispatch and method combinations.
(prefers dispatcher)
Return a map of preferred dispatch value -> set of other dispatch values.
Return a map of preferred dispatch value -> set of other dispatch values.
(primary-methods method-table)
Get a dispatch-value -> fn
map of all primary methods assoicated with this method table.
Get a `dispatch-value -> fn` map of all primary methods assoicated with this method table.
(remove-aux-method method-table qualifier dispatch-val method)
Remove an auxiliary method from a method table. Because multiple auxiliary methods are allowed for the same
dispatch value, existing implementations of MethodTable
are currently only able to remove exact matches -- for
functions, this usually means identical objects.
In the future, I hope to fix this by storing unique indentifiers in the metadata of methods in the map.
Remove an auxiliary method from a method table. Because multiple auxiliary methods are allowed for the same dispatch value, existing implementations of `MethodTable` are currently only able to remove exact matches -- for functions, this usually means identical objects. In the future, I hope to fix this by storing unique indentifiers in the metadata of methods in the map.
(remove-primary-method method-table dispatch-value)
Remove the primary method for dispatch-value
.
Remove the primary method for `dispatch-value`.
(transform-fn-tail method-combination qualifier fn-tail)
Make appropriate transformations to the fn-tail
of a defmethod
macro expansion for a primary
method (qualifier will be nil
) or an auxiliary method. You can use this method to add implicit args like
next-method
to the body of a defmethod
macro. (Because this method is invoked during macroexpansion, it should
return a Clojure form.)
Make appropriate transformations to the `fn-tail` of a `defmethod` macro expansion for a primary method (qualifier will be `nil`) or an auxiliary method. You can use this method to add implicit args like `next-method` to the body of a `defmethod` macro. (Because this method is invoked during macroexpansion, it should return a Clojure form.)
(with-dispatcher multifn new-dispatcher)
Return a copy of this multifn using new-dispatcher
as its dispatcher.
Return a copy of this multifn using `new-dispatcher` as its dispatcher.
(with-method-table multifn new-method-table)
Return a copy of this multifn using new-method-table
as its method table.
Return a copy of this multifn using `new-method-table` as its method table.
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close