在Clojure中如何将多个参数传递给defmethod?

时间:2011-04-06 17:59:54

标签: clojure

我希望创建一个多方法,我称之为:

(defmethod some-method "some value"
  [ a b ]
  b)

:但仅选择基于第一个参数'a'的函数。我该怎么做:

(defmulti some-method
  WHAT GOES HERE?)

2 个答案:

答案 0 :(得分:8)

我没有完全理解你的问题,但我想你想 仅在一个参数上发送。你可以这样做,我想:

user=> (defmulti even-or-odd (fn [x _] (even? x)))
#'user/even-or-odd
user=> (defmethod even-or-odd true [a _] :even)
#<MultiFn clojure.lang.MultiFn@293bdd36>
user=> (defmethod even-or-odd false [a _] :odd)
#<MultiFn clojure.lang.MultiFn@293bdd36>
user=> (even-or-odd 2 3)
:even
user=> (even-or-odd 3 3)
:odd
user=> 

答案 1 :(得分:6)

您的意思是根据?

选择功能

然后你需要

(defmulti some-method (fn [a b] a))