Clojure - despedida
Hay casos en los que a un agente se le asigna una función que es de naturaleza bloqueante. Un ejemplo simple es, considere que está leyendo contenido de un archivo que en sí mismo es de naturaleza bloqueante. Entonces, la función de envío primero devolverá inmediatamente al agente y continuará con la operación del archivo. Cuando se complete la operación del archivo, actualizará automáticamente el agente con el contenido del archivo.
Sintaxis
A continuación se muestra la sintaxis.
(send agentname function value)
Parameters- 'agentname' es el agente al que se redirige la función de envío. La 'función' se usa para determinar de qué manera se cambiará el valor del agente. En nuestro caso, usaremos el símbolo de suma + para agregar un valor al valor existente del agente. 'Valor' es el valor pasado a la función que a su vez se utilizará para actualizar el valor del agente en consecuencia.
Return Value- Primero devuelve el agente como está, si hay una función de no bloqueo. Al final, devuelve un objeto de agente con un nuevo valor.
Ejemplo
En el siguiente programa se muestra un ejemplo de cómo se usa.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(def counter (agent 0))
(println @counter)
(send-off counter + 100)
(println @counter)
(println @counter))
(Example)
Estamos viendo el mismo ejemplo de incrementar el valor del contador, pero a partir de la siguiente salida quedará claro lo que hace la función de envío.
Salida
El programa anterior produce la siguiente salida.
0
0
0
Se puede ver que aunque hayamos enviado al agente una función para establecer el valor en 100, no se refleja inmediatamente. La función de envío primero devuelve el valor del agente tal como está. Una vez que Clojure ha establecido correctamente el valor del agente, el valor del agente se actualiza y podemos ver el nuevo valor del agente.