Thanks Stuart. I have figured out another way, which is much more general (and uses the lowest level of how Clojure works).
(defn evalStr [s] (clojure.lang.Compiler/eval (clojure.lang.RT/ readString s))) will (attempt to) execute any valid form (i.e. the string that is the source of the form). Thus: (evalStr "(+ 1 2)") --> 3 On Apr 26, 5:21 pm, Stuart Sierra <the.stuart.sie...@gmail.com> wrote: > 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 -~----------~----~----~----~------~----~------~--~---