В Clojure, как я могу передать несколько аргументов в defmethod? - PullRequest
9 голосов
/ 06 апреля 2011

Я хочу создать мульти-метод, который я называю так:

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

: но который выбирает функцию, основываясь только на первом параметре 'a'.Как я могу это сделать:

(defmulti some-method
  WHAT GOES HERE?)

Ответы [ 2 ]

8 голосов
/ 06 апреля 2011

Я не совсем понял ваш вопрос, но я думаю, вы хотите отправить только по одному аргументу.Вы можете сделать это так, я думаю:

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=> 
6 голосов
/ 06 апреля 2011

Вы имеете в виду выбрать функцию на основе значения из?

Тогда вам просто нужно

(defmulti some-method (fn [a b] a))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...