On Sun, Feb 27, 2011 at 2:10 PM, Ken Wesson <kwess...@gmail.com> wrote: > On Sat, Feb 26, 2011 at 8:14 PM, Mark <markaddle...@gmail.com> wrote: >> I get this: >> #<CompilerException java.lang.IllegalArgumentException: Wrong number >> of args (3) passed to: Symbol (C:\Users\addma03\workspace\test\src\main >> \clojure:1)> >> >> A few suggestions: >> 1) An improved line number >> 2) I'd like to see the value of the Symbol >> 3) I'd like to see the three args applies to the symbol and, if the >> symbol resolves to a function, I'd like to see the arity of the >> function. >> >> Something like: >> Wrong number of args (3) passed to Symbol 'some-fn' which expects >> arity 2 > > This is interesting. I just checked with my copy of 1.2 and it seems > you can indeed call a symbol as a function. It appears to try to look > itself up in its first argument, the same as a keyword, and if not > found or the first argument is not a map returns the (optional) second > argument: > > user=> ('+ {'+ 3 '* 4} 42) > 3 > user=> ('+ {'- 3 '* 4} 42) > 42 > > Of course this is rather icky to use because of the need to quote the symbols. > > So, the arity expected by a function like + ends up irrelevant. If you > invoke something on '+ it wants either one or two arguments. > > If you're seeing this error you probably have a buggy macro that's not > unquoting something as many times as it should be. Quoting-depth > errors (other than forgetting to unquote something at all) seem to be > most common when writing macros that emit other macros, and ending up > with nested syntax-quoted expressions, doubled-up ~~@foo type > unquotings, and things like `(quote ~foo) in helper functions. > > If the error points to a macro invocation I'd suggest inspecting the > output of (macroexpand-1 '(the-problem-invocation)) and seeing what > you get. If the output contains quoted symbols in operator position > that clearly are meant to be just normal calls to functions then > you've at least determined that the problem is caused by the macro. > Though it could be the case that your arguments to the macro violate > its preconditions. If it's not your own macro, check its > documentation. If it is it has a bug since it's not doing what you > want it to do and it's yours. If it's not it may or may not have a > bug.
Addendum: the most likely macro *argument* error to cause this is quoting a function name macro argument that you shouldn't be quoting, e.g. (the-macro 'my-func ...) instead of (the-macro my-func ...). The macro just plops (quote my-func) wherever it should put my-func and boom! -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en