Great! that was the missing bit i was looking for.
thanks for clearing it out

(& it seems that String. is indeed a macro)

On Jun 8, 11:05 pm, Kevin Downey <redc...@gmail.com> wrote:
> sure it can, you just need to pass in an initial value.
>
> (-> (String.) String. String.) ; works
> (-> x String. String.) ;works for any x where string has a constructor
> that takes something of type x
>
> for example
>
> (-> "file.txt" File. FileReader. BufferedReader.)
>
> will return a buffered reader on file.txt (assuming you import those
> classes from java.io)
>
>
>
> On Mon, Jun 8, 2009 at 12:59 PM, ronen<nark...@gmail.com> wrote:
>
> > I see, using "->" with "." will not create a chain of "new"
> > invocations, the best solution that iv found is:
> > user=> (String. (String.))
> > ""
> > user=> (macroexpand (String. (String.)))
> > ""
> > user=> (macroexpand `(String. (String.)))
> > (new java.lang.String (java.lang.String.))
>
> > Nesting is a must :)
> > Thank you both for your helpful reply
>
> > On Jun 8, 10:51 pm, Kevin Downey <redc...@gmail.com> wrote:
> >> you need to pass something in.
> >> example:
>
> >> => (-> "foo" String. String.)
> >> "foo"
>
> >> => (macroexpand '(-> String. String.))
> >> (new String String.)
>
> >> => (macroexpand '(-> "foo" String. String.))
> >> (new String (clojure.core/-> "foo" String.))
> >> => (macroexpand '(-> "foo" String.))
> >> (new String "foo")
>
> >> String. is only treated as new String ...  when it is placed in the
> >> function position (String. ...)
> >>  in (-> String. String.) the first String. is never put in the
> >> function position, so effectively you get
> >> (String. String.)
>
> >> On Mon, Jun 8, 2009 at 12:38 PM, ronen<nark...@gmail.com> wrote:
>
> >> > Following a blog post on building large object graphs I was suggested
> >> > with the following solution:
> >> >  (def nested-object (-> GrandFather. Father. GrandSon.))
>
> >> > this indeed seems to be correct however fails in even in a simple
> >> > example:
>
> >> > user=> (-> String. String.)
> >> > java.lang.ClassNotFoundException: String. (NO_SOURCE_FILE:7)
>
> >> > expanding the macros involved seems to reveal the issue:
>
> >> > user=> (macroexpand-1 `(-> String. String.))
> >> > (java.lang.String. java.lang.String.)
>
> >> > the "." macro isn't expanded.
>
> >> > Is there a way of applying nested macros?
> >> > (iv searched for "applying nested macros" with no results).
>
> >> --
> >> And what is good, Phaedrus,
> >> And what is not good—
> >> Need we ask anyone to tell us these things?
>
> --
> And what is good, Phaedrus,
> And what is not good—
> Need we ask anyone to tell us these things?
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to