multimethod bug?

4 views
Skip to first unread message

mifrai

unread,
Apr 22, 2008, 10:24:57 PM4/22/08
to Clojure
Is this expected behavior?

(defmulti arg-count (fn [& args] (count args)))
(defmethod arg-count 0
([] "zero args"))
(defmethod arg-count 1
([a] "one arg"))
(defmethod arg-count 2
([a b] "two args"))
(defmethod arg-count :default
([& r] "a lot of args"))

user> (arg-count 1)
"one arg"
user> (arg-count 1 2)
"two args"
user> (arg-count 1 2 3)
"a lot of args"
user> (arg-count)
java.lang.IllegalArgumentException: Wrong number of args passed to:
MultiFn
at clojure.lang.AFn.throwArity(AFn.java:460)
at clojure.lang.AFn.invoke(AFn.java:59)
at clojure.lang.AFn.applyToHelper(AFn.java:182)
at clojure.lang.AFn.applyTo(AFn.java:175)

Rich Hickey

unread,
Apr 22, 2008, 11:10:29 PM4/22/08
to Clojure


On Apr 22, 10:24 pm, mifrai <mif...@hotmail.com> wrote:
> Is this expected behavior?
>
> (defmulti arg-count (fn [& args] (count args)))
> (defmethod arg-count 0
> ([] "zero args"))
> (defmethod arg-count 1
> ([a] "one arg"))
> (defmethod arg-count 2
> ([a b] "two args"))
> (defmethod arg-count :default
> ([& r] "a lot of args"))
>
> user> (arg-count 1)
> "one arg"
> user> (arg-count 1 2)
> "two args"
> user> (arg-count 1 2 3)
> "a lot of args"
> user> (arg-count)

Thinking that one would need something to dispatch on, I had
disallowed no-arg multimethods, but this arity-based dispatching is
fair game, so I've enabled it.

Thanks for the report,

Rich
Reply all
Reply to author
Forward
0 new messages