Clojure - Agenti

Come sottolineato molte volte, Clojure è un linguaggio di programmazione in cui molti dei tipi di dati sono immutabili, il che significa che l'unico modo in cui è possibile modificare il valore di una variabile è creare una nuova variabile e assegnarle il nuovo valore. Tuttavia, Clojure fornisce alcuni elementi che possono creare uno stato mutevole. Abbiamo visto che questo può essere ottenuto con il tipo di dati atom. L'altro modo in cui questo può essere ottenuto è tramite agenti.

Agentsfornire un cambiamento indipendente e asincrono delle singole posizioni. Gli agenti sono vincolati a una singola posizione di archiviazione per la loro durata e consentono solo la mutazione di quella posizione (in un nuovo stato) come risultato di un'azione. Le azioni sono funzioni (con, facoltativamente, argomenti aggiuntivi) che vengono applicate in modo asincrono allo stato di un agente e il cui valore di ritorno diventa il nuovo stato dell'agente.

Le seguenti operazioni sono possibili in Clojure per quanto riguarda gli agenti.

Sr.No. Operazioni e descrizione
1 agente

Un agente viene creato utilizzando il comando agente.

2 Spedire

Questa funzione viene utilizzata per inviare un valore all'agente.

3 agenti di arresto

Questa funzione viene utilizzata per arrestare qualsiasi agente in esecuzione.

4 commiato

Ci sono casi in cui a un agente viene assegnata una funzione di natura bloccante.

5 attendono

Poiché c'è un ritardo quando un valore di un agente viene aggiornato, Clojure ha fornito una funzione di "attesa per" che viene utilizzata per specificare il tempo in millisecondi di attesa per l'aggiornamento dell'agente.

6 attendere

Blocca il thread corrente (indefinitamente!) Finché tutte le azioni inviate fino a quel momento, da questo thread o agente, agli agenti non si sono verificate. Blocca sugli agenti falliti.

7 errore-agente

Restituisce l'eccezione generata durante un'azione asincrona dell'agente, se l'agente non riesce. Restituisce zero se l'agente non fallisce.