Type hint Java array of your own Java class

2009-02-04 Thread David Nolen
(defn foobar [#^MyClass[] myarray])
This syntax doesn't seem to work.

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



Re: Type hint Java array of your own Java class

2009-02-04 Thread Christophe Grand

David Nolen a écrit :
> (defn foobar [#^MyClass[] myarray])
>
> This syntax doesn't seem to work.
Indeed it's a bit tricky:
#^"[Lyour.package.YourClass;"

You can find it by doing:
user=> (class (into-array [(your.package.YourClass.)]))
[Lyour.package.YourClass;

Christophe

-- 
Professional: http://cgrand.net/ (fr)
On Clojure: http://clj-me.blogspot.com/ (en)



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



Re: Type hint Java array of your own Java class

2009-02-04 Thread David Nolen
Many thanks.

On Wed, Feb 4, 2009 at 12:49 PM, Christophe Grand wrote:

>
> David Nolen a écrit :
> > (defn foobar [#^MyClass[] myarray])
> >
> > This syntax doesn't seem to work.
> Indeed it's a bit tricky:
> #^"[Lyour.package.YourClass;"
>
> You can find it by doing:
> user=> (class (into-array [(your.package.YourClass.)]))
> [Lyour.package.YourClass;
>
> Christophe
>
> --
> Professional: http://cgrand.net/ (fr)
> On Clojure: http://clj-me.blogspot.com/ (en)
>
>
>
> >
>

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



Re: Type hint Java array of your own Java class

2009-02-04 Thread Chouser

On Wed, Feb 4, 2009 at 12:49 PM, Christophe Grand  wrote:
>
> David Nolen a écrit :
>> (defn foobar [#^MyClass[] myarray])
>>
>> This syntax doesn't seem to work.
> Indeed it's a bit tricky:
> #^"[Lyour.package.YourClass;"
>
> You can find it by doing:
> user=> (class (into-array [(your.package.YourClass.)]))
> [Lyour.package.YourClass;

Christophe, thanks for pointing the way.  Sorry I kept going...

(defn array-of [cname]
  (-> cname resolve .newInstance list into-array class .getName))

With that, you can:

(defn foobar [#^#=(array-of MyClass) myarray])

At least it appears to work:

user=> (meta #^#=(array-of String) [])
{:tag "[Ljava.lang.String;"}

Again, I apologize for even suggesting this.

--Chouser

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



Re: Type hint Java array of your own Java class

2009-02-04 Thread chris

Sorry for jumping in, but

"#^#=" doesn't make any sense to me.  Where did this come from?

Chris

On Feb 4, 2:55 pm, Chouser  wrote:
> On Wed, Feb 4, 2009 at 12:49 PM, Christophe Grand  
> wrote:
>
> > David Nolen a écrit :
> >> (defn foobar [#^MyClass[] myarray])
>
> >> This syntax doesn't seem to work.
> > Indeed it's a bit tricky:
> > #^"[Lyour.package.YourClass;"
>
> > You can find it by doing:
> > user=> (class (into-array [(your.package.YourClass.)]))
> > [Lyour.package.YourClass;
>
> Christophe, thanks for pointing the way.  Sorry I kept going...
>
> (defn array-of [cname]
>   (-> cname resolve .newInstance list into-array class .getName))
>
> With that, you can:
>
> (defn foobar [#^#=(array-of MyClass) myarray])
>
> At least it appears to work:
>
> user=> (meta #^#=(array-of String) [])
> {:tag "[Ljava.lang.String;"}
>
> Again, I apologize for even suggesting this.
>
> --Chouser
--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---



Re: Type hint Java array of your own Java class

2009-02-04 Thread Chouser

On Wed, Feb 4, 2009 at 6:22 PM, chris  wrote:
>
> "#^#=" doesn't make any sense to me.  Where did this come from?

I already apologized twice, what more do you want from me!?

As penance, I will try to explain.

#^ is a reader macro, documented at http://clojure.org/reader

#= is another reader macro, largely undocumented, but discussed here:
http://groups.google.com/group/clojure/browse_thread/thread/7a24eeb982490a87/d579d881fea5b16d?#d579d881fea5b16d

>> user=> (meta #^#=(array-of String) [])
>> {:tag "[Ljava.lang.String;"}

The whole point of this example was to attach type-hint metadata to a
function arg, so the use of #^ was necessary.  But usually #^ just
takes a literal symbol or map, and I wanted to use the results of a
function call, so I abused #= to do just that.

--Chouser

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



Re: Type hint Java array of your own Java class

2009-02-04 Thread Christophe Grand

Chouser a écrit :
> (defn foobar [#^#=(array-of MyClass) myarray])
>
> Again, I apologize for even suggesting this
Wow what a clever (ab)use of reader macros!

-- 
Professional: http://cgrand.net/ (fr)
On Clojure: http://clj-me.blogspot.com/ (en)



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



Re: Type hint Java array of your own Java class

2009-02-05 Thread Christian Vest Hansen

On Thu, Feb 5, 2009 at 7:33 AM, Christophe Grand  wrote:
>
> Chouser a écrit :
>> (defn foobar [#^#=(array-of MyClass) myarray])
>>
>> Again, I apologize for even suggesting this
> Wow what a clever (ab)use of reader macros!

This is where a raptor jumps in from the left and eats someone :)

>
> --
> Professional: http://cgrand.net/ (fr)
> On Clojure: http://clj-me.blogspot.com/ (en)
>
>
>
> >
>



-- 
Venlig hilsen / Kind regards,
Christian Vest Hansen.

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