Thanks, that clarifies the behavior. Regardless though, at some point the "int" is becoming a "Long" which is a change of type. I'm arguing that Clojure should box primitive ints as Longs.
Stu, I wouldn't say Clojure's behavior makes it "just work". For example, if I obtained by number using Integer/valueOf, then Clojure will not change the Integer to a Long and will not prevent me from putting it in a collection. It's confusing that Integer/valueOf will stay an Integer in Clojure-land, and Integer/parseInt will become a Long in Clojure-land. The use case I'm interested in here is just this one point of Java interop: what Clojure does with primitive ints that it gets from a Java object (as far as I can tell, this is the only way to get a primitive int in Clojure 1.3). I think it's better that Clojure be consistent in its treatment of Integer objects and primitive ints by not changing the types on you. -Nathan On Oct 20, 10:19 am, Justin Kramer <jkkra...@gmail.com> wrote: > Oops, I elided a little too much. Need a method with an Object signature to > distinguish Integer from int: > > (definterface IPrimitiveTester > (getType [^int x]) > (getType [^long x]) > ;; etc > (getType [^Object x])) > > (deftype PrimitiveTester [] > IPrimitiveTester > (getType [this ^int x] :int) > (getType [this ^long x] :long) > ;; etc > (getType [this ^Object x] :object)) > > (defmacro primitive-type [x] > `(.getType (PrimitiveTester.) ~x)) > > (comment > > user=> (primitive-type (Integer. 5)) > :object > user=> (primitive-type (Integer/parseInt "5")) > :int > > ) > > > > > > > > On Thursday, October 20, 2011 1:13:03 PM UTC-4, Justin Kramer wrote: > > > Here's a quick proof using an interface-based primitive detector: > > > (definterface IPrimitiveTester > > (getType [^int x]) > > (getType [^long x]) > > ;; other types elided > > ) > > > (deftype PrimitiveTester [] > > IPrimitiveTester > > (getType [this ^int x] :int) > > (getType [this ^long x] :long) > > ;; other types elided > > ) > > > (defmacro primitive-type [x] > > `(.getType (PrimitiveTester.) ~x)) > > > (comment > > > user=> (primitive-type 5) ;unboxed > > :long > > user=> (primitive-type (Integer/parseInt "5")) ;unboxed > > :int > > user=> (class (Integer/parseInt "5")) ;boxed > > java.lang.Long > > > ) > > > Justin -- 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