On Sun, Jun 10, 2012 at 7:04 PM, Jim - FooBar(); <jimpil1...@gmail.com> wrote: > Hi again (busy day eh?), > > well this doesn't make any sense either! Why is a record with type-hinted > arguments still using reflection? > I've got the following example record: > -------------------------------------------------------------------------------------------------- > (defrecord CheckersPiece [^java.awt.Color color > ^java.awt.Point position > rank] > Piece > (update-position [this np] ;mutable state inside Point! > (. position setLocation ;can accept ints or doubles > (first np) (second np))) ;np should be [x, y]
"can accept ints or doubles" How is the Clojure compiler to know wether to compile a call to Point.setLocation(double,double) or Point.setLocation(int,int)? I think you need to tell the compiler the types of (first np) and (second np), which means -- of course -- that you'll need to know what they are statically. I'm a little rusty on my type hinting, but have you tried something like: (.position setLocation ^double (first np) ^double (second np)) or (.position setLocation ^int (first np) ^int (second np)) // ben > (die [this] (vary-meta this assoc :dead true)) ;communicate death > through meta-data > (promote [this] (make-checker color position :rank 'prince)) ; a checker is > promoted to prince > (getGridPosition [this] (vector (.getX position) (.getY position))) > (getListPosition [this] (translate-position (first (.getGridPosition > this)) > (second (.getGridPosition > this)) board-mappings-checkers)) > (getPoint [this] position) > (getMoves [this] nil) ;TODO > Object > (toString [this] > (println "Checker (" rank ") at position:" (.getListPosition this) " ->" > (.getGridPosition this))) ) > --------------------------------------------------------------------------------------------------------------------------- > and whenever i call update-position it complains that setLocation cannot be > resolved. setLocation is a method in java.awt.Point so i don't see why this > happens! > > any suggestions? > > Jim > > -- > 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