Clojure - envoi

Il existe des cas dans lesquels un agent se voit attribuer une fonction de nature bloquante. Un exemple simple est, considérez que vous lisez le contenu d'un fichier qui lui-même est de nature bloquante. Ainsi, la fonction d'envoi retournera d'abord immédiatement l'agent et poursuivra l'opération de fichier. Une fois l'opération de fichier terminée, il mettra automatiquement à jour l'agent avec le contenu du fichier.

Syntaxe

Voici la syntaxe.

(send agentname function value)

Parameters- 'agentname' est l'agent vers lequel la fonction d'envoi est redirigée. La «fonction» est utilisée pour déterminer de quelle manière la valeur de l'agent sera modifiée. Dans notre cas, nous utiliserons le symbole addition + pour ajouter une valeur à la valeur existante de l'agent. «Valeur» est la valeur transmise à la fonction qui à son tour sera utilisée pour mettre à jour la valeur de l'agent en conséquence.

Return Value- Retourne d'abord l'agent tel qu'il est, s'il existe une fonction non bloquante. À la fin, renvoie un objet agent avec une nouvelle valeur.

Exemple

Un exemple sur la façon dont cela est utilisé est montré dans le programme suivant.

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (def counter (agent 0))
   (println @counter)
   
   (send-off counter + 100)
   (println @counter)
   (println @counter))
(Example)

Nous regardons le même exemple d'incrémentation de la valeur du compteur, mais à partir de la sortie suivante, il sera clair ce que fait la fonction d'envoi.

Production

Le programme ci-dessus produit la sortie suivante.

0
0
0

On peut voir que même si nous avons envoyé à l'agent une fonction pour définir la valeur à 100, cela ne reflète pas immédiatement. La fonction d'envoi renvoie d'abord la valeur de l'agent tel quel. Une fois la valeur de l'agent correctement définie par Clojure, la valeur de l'agent est alors mise à jour et nous pouvons voir la nouvelle valeur de l'agent.

clojure_agents