On Tue, Oct 18, 2011 at 7:45 PM, nathanmarz <nathan.m...@gmail.com> wrote: > Thanks. I read through that and it didn't quite answer my question. To > me it seems more logical that: > > 1. Clojure defaults to longs when you create a new number (with a > literal 0, 1, etc) > 2. You can create ints by doing (int 0) > 3. Clojure never changes the types of things you're using
I think you'll find that clojure doesn't change types, except where required, mostly for boxing. Clojure 1.2 would construct a new Integer around an int when required. Clojure 1.3 constructs a new Long around an int instead, because rich has decided he prefers longs and doubles to ints and floats. If you want to do your own boxing prior to using a value in a way that would box it, you can, and your type will not "change" user> (def boxed-by-clojure (.intValue 3)) #'user/boxed-by-clojure user> (type boxed-by-clojure) java.lang.Long user> (def boxed-by-me (Integer. (.intValue 3))) #'user/boxed-by-me user> (type boxed-by-me) java.lang.Integer user> > I find Clojure's behavior of changing the types of primitive ints to > longs highly unusual, and it is causing a lot of pain in upgrading > Storm to 1.3. > > I don't mean to imply that the design choices made were wrong; I know > that Rich et al put a lot of thought and work into these changes. But > I would like to understand why changing the types of ints to longs is > necessary instead of supporting primitive ints as well. > > -Nathan > > > On Oct 18, 2:25 pm, David Nolen <dnolen.li...@gmail.com> wrote: >> 233 messages long thread from June >> 2010,http://groups.google.com/group/clojure/browse_thread/thread/c8c850595... >> >> David >> >> >> >> >> >> >> >> On Tue, Oct 18, 2011 at 5:00 PM, nathanmarz <nathan.m...@gmail.com> wrote: >> > Hey all, >> >> > I recently started upgrading Storm to Clojure 1.3, and I ran into >> > various issues due to Clojure's treatment of integers and longs. In >> > particular, I have a situation like the following: >> >> > 1. A Java object returns me an int. Let's call this value "v". >> > 2. I put "v" into a map, and pass that map into a Java object >> > 3. I get ClassCastExceptions when that Java object tries to read that >> > Integer and instead gets a Long back >> >> > The error arises due to Clojure's auto-coercion of primitive ints to >> > longs. >> >> > Auto-coercing ints to longs is prone to errors like I ran into, >> > especially when interoperating with Java code. It becomes especially >> > confusing when considering that "Integer" objects do not get coerced >> > to "Long" objects. Also, if Clojure is trying to treat everything as >> > longs, I don't understand why there's an unchecked-divide-int function >> > and not an unchecked-divide-long function. >> >> > What's the rationale behind all this? Why not support both ints and >> > longs? I'm sure this has been discussed before, so feel free to point >> > me to earlier discussions on this. >> >> > -Nathan >> >> > -- >> > 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 > > -- > 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 -- 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