2009-07-11 7 views
4

Je comprends ce que: state/does /. Il crée un champ, comme dans Java, dans votre classe. Ce que je ne comprends pas c'est à quoi ça sert? Il semble que je le vois seulement avec des classes générées par Clojure qui étendent d'autres classes. http://www.fatvat.co.uk/2009/05/clojure-and-robocode.html étant un exemple. Je ne connais pas Java, et je ne suis pas très versé dans la programmation orientée objet. Quelqu'un peut-il expliquer le point de: état à moi, et où tout cela s'intègre avec Java interop?Compréhension des problèmes: état dans Clojure

Merci beaucoup!

NOTE: Quand je dis: état, je me réfère à (: gen-classe: Etat)

Répondre

2

Je en ai parlé avec hiredman sur le canal IRC#Clojure, et il m'a dit que le principal point de c'est un état par instance. Ça a du sens.

3

: l'état est simplement un moyen de partager certaines données entre les fonctions générées dans le cadre de gen-class. Pensez-y comme étant exactement le même que les données d'instance d'un objet.

3

Plus infomation sur le state et comment initialiser se trouve l'article gen-class – how it works and how to use it

de l'article:

  • :state définit une méthode qui renverra l'état de l'objet.
  • :init définit le nom de l'initialiseur. C'est une fonction qui doit retourner un vecteur. Le premier élément est à nouveau un vecteur d'arguments pour le constructeur de super classe. Dans notre cas, c'est juste le vecteur vide. Le deuxième élément est l'état de l'objet.

En résumé, init renvoie l'état de l'objet et est appelé lorsque l'objet est instancié. state est une méthode sur la classe, par opposition à une fonction, qui retournera la même valeur renvoyée que le deuxième élément dans le vecteur retourné par init.

L'article montre ensuite comment utiliser un atome pour pouvoir changer l'état de l'objet, si nécessaire.