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.