Clojure - enviar

Esta função é usada para enviar um valor ao agente.

Sintaxe

A seguir está a sintaxe.

(send agentname function value)

Parameters- 'nomedagente' é o agente para o qual a função de envio está sendo redirecionada. A 'função' é usada para determinar de que maneira o valor do agente será alterado. No nosso caso, usaremos o símbolo de adição + para adicionar um valor ao valor existente do agente. 'Valor' é o valor passado para a função, que por sua vez será usado para atualizar o valor do agente de acordo.

Return Value - Retorna um objeto de agente com um novo valor.

Exemplo

Um exemplo de como isso é usado é mostrado no programa a seguir.

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

Resultado

O programa acima produz a seguinte saída.

0
Incrementing Counter
0

Observe o seguinte sobre o programa acima.

  • Como a função de envio é uma função assíncrona, há um atraso de tempo para quando o valor do agente é atualizado. É por isso que adicionamos uma instrução extra 'println' ao programa. Isso é para dar ao ambiente Clojure o tempo necessário para atualizar o valor do agente de acordo.

  • Em segundo lugar, quando você executa o programa acima, o programa não será encerrado imediatamente. Isso ocorre porque o ambiente Clojure não sabe se é seguro desligar o agente. Veremos como desligar agentes na próxima descrição da função.

clojure_agents