Clojure - Agents
Comme indiqué à plusieurs reprises, Clojure est un langage de programmation dans lequel de nombreux types de données sont immuables, ce qui signifie que la seule façon de changer la valeur d'une variable est de créer une nouvelle variable et de lui attribuer la nouvelle valeur. Cependant, Clojure fournit certains éléments qui peuvent créer un état mutable. Nous avons vu que cela peut être réalisé avec le type de données atom. L'autre façon d'y parvenir est via les agents.
Agentsfournir un changement indépendant et asynchrone des emplacements individuels. Les agents sont liés à un emplacement de stockage unique pendant toute leur durée de vie et n'autorisent que la mutation de cet emplacement (vers un nouvel état) à la suite d'une action. Les actions sont des fonctions (avec, éventuellement, des arguments supplémentaires) qui sont appliquées de manière asynchrone à l'état d'un agent et dont la valeur de retour devient le nouvel état de l'agent.
Les opérations suivantes sont possibles dans Clojure en ce qui concerne les agents.
N ° Sr. | Opérations et description |
---|---|
1 | agent
Un agent est créé à l'aide de la commande agent. |
2 | envoyer
Cette fonction est utilisée pour envoyer une valeur à l'agent. |
3 | agents d'arrêt
Cette fonction est utilisée pour arrêter tous les agents en cours d'exécution. |
4 | envoyer
Il existe des cas dans lesquels un agent se voit attribuer une fonction de nature bloquante. |
5 | attendre-pour
Puisqu'il y a un délai lorsqu'une valeur d'un agent est mise à jour, Clojure a fourni une fonction «en attente» qui est utilisée pour spécifier le temps en millisecondes à attendre que l'agent soit mis à jour. |
6 | attendre
Bloque le thread actuel (indéfiniment!) Jusqu'à ce que toutes les actions distribuées jusqu'ici, de ce thread ou agent, à l'agent (s) se soient produites. Bloquera sur les agents défaillants. |
sept | erreur d'agent
Renvoie l'exception levée lors d'une action asynchrone de l'agent, si l'agent échoue. Renvoie nil si l'agent n'échoue pas. |