This will work: ((resolve (symbol "+")) 1 2 3) To answer your question, a symbol is just a symbol, it doesn't have a value. (In Common Lisp, symbols have values, but in Clojure they do not.) In Clojure, values belong to Vars. "resolve" will find the Var that is named by the symbol. When you write (+ 1 2 3), the compiler automatically resolves the "+" to get the Var #'clojure.core/+
To invoke Java methods by name, use the Java Reflection API: http://java.sun.com/docs/books/tutorial/reflect/index.html -Stuart Sierra On Apr 26, 10:46 am, timc <timgcl...@gmail.com> wrote: > Is there a way of invoking functions, or java methods "by name" in > Clojure? > Or, put another way, why does this work: > > (+ 1 2) > > but this does not: > > ((symbol "+") 1 2) > > Similarly, this works > > (. javaObj (methodName param)) > > but this does not: > > (. javaObj ((symbol "methodName") param)) > > I suppose this really comes down to the question: what is a symbol? > And, is the thing at the head of the list (+ 1 2 3) a symbol? > > [In Icon, for example, there is no difference between > > "funcName"(1,2,3) and funcName(1,2,3), or indeed: > > x := "funcName" > x(1,2,3) > > which is VERY useful.] --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---