On 12/06/12 13:16, Tassilo Horn wrote:
I don't get you. If IPieces can be moved, then move should be a
protocol method declared in IPiece.
No what i have in IPiece is 'updatePosition' so each piece knows how to
update its position. THere is more to a move though. 'move' is a regular
function that builds a new board every time...a move might have killed
some pieces etc...
And when you say you have reflection warnings, can it be that you call a
protocol method foo with (.foo o) [note the .-syntax]...
I'msure you will understand if you see the code:
(defn move
"The function responsible for moving Pieces. Each piece knows how to
move itself. Returns the new board."
^clojure.lang.LazySeq
[^clojure.lang.Symbol game mappings ^Clondie24.core.IPiece p coords]
{:pre [(satisfies? IPiece p)]} ;safety comes first
(if (in? mappings (vector-of-doubles coords)) ;check that position
exists on the grid
(do (.update-position p coords) ;coords should be of the form [x, y]
(reset! (current-items game true) ;replace the board atom
(clean (build-board game)))) ;;replace the old board with the new
(throw (IllegalArgumentException. (str coords " is NOT a valid position
according to the mappings provided!")))))
Notice the ''(.update-position p coords)" right after 'do'...this is
where the reflection was occuring because I could not type-hint the
argument correctly! Now it is sorted though (as you can see)...
makes sense now?
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