On Sun, Jun 10, 2012 at 7:04 PM, Jim - FooBar(); <[email protected]> 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 [email protected]
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> [email protected]
> 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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en