I added the project in google code (github kept complaining about my public key) http://code.google.com/p/randomrpg/
I reduced the LOC to ~900. I'll try once more to port it to clojure (thanks for the macro Adam), but don't know when i'll be done. Regards. Islon On Nov 21, 4:27 pm, Adam Jones <[EMAIL PROTECTED]> wrote: > On Nov 20, 12:23 pm, islon <[EMAIL PROTECTED]> wrote: > > > > > I'm porting my single thread simple mud-like rpg game from scala to > > clojure and one thing that is annoying me is the code needed to change > > some var. > > In scala I do things like that: > > > val player = new Player(...) > > > player.str += 1 > > > in clojure I have to do (player is a struct and its attributes are > > refs): > > > (def player (Player ...)) > > > (dosync (ref-set player (assoc player :str (inc (:str player))))) > > > In scala when I want mutability I just define the variable with "var" > > instead of "val", just one letter, simple and elegant. > > It's a game, it's full of states and mutability, the game is single > > thread, I don't need transactions. Am I missing something? > > If this is really that big of a deal, you could always go the macro > route. I'm not experienced enough to say if this is a long-term good > decision, but here's a first pass, don't even have Clojure available > to try it, attempt at wrapping up Chouser's suggestion (I think := > would be better here, but that clashes with keyword definition): > > (defmacro |= [target attr fun] > "Updates 'attr' of 'target' by passing the current value to 'fun' > and commuting the result, all inside of a transaction" > `(dosync > (commute ~target update-in [~attr] ~fun))) > > With usage: > > (|= player :str inc) > > That look a little better? > > -Adam --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---