With a fresh brain (and a fresh cup of coffee), I realized this message is probably caused (somehow) by my misuse of the midje library. No doubt it does fancy macro stuff under-the-hood.
At the core of this problem is that I'm a naive client of this macro library and by an innocent misuse, I am stuck trying to debug my syntax error by commenting out various pieces, adding printlns to see how far the compiler gets in evaluating expressions, and guessing what could be causing the problem. One could certainly argue that the macro should do more to detect syntax errors and report them gracefully and I would agree. I do not believe that relieves any responsibility from the compiler to report as much information as it can when it detects an error. It would be nice if the compiler would report the macro form it was trying to expand. I see it being an IDEs job to add niceties like a macro expander tool which would let me expand the macro step-by-step. None of this should be taken as a knock against midje. I'm just starting to learn it and the style of programming it fosters and I like it very much! On Feb 27, 1:50 pm, Mark <markaddle...@gmail.com> wrote: > I wrote that up quickly without thinking much about it. Yes, the > invocation is definitely a macro and not a function. Still, I think > it would be helpful to see the symbol's value and, if possible, the > macro's arity. > > On Feb 27, 1:13 pm, Ken Wesson <kwess...@gmail.com> wrote: > > > > > > > > > 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