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
-~----------~----~----~----~------~----~------~--~---

Reply via email to