Clojure - erro de agente
Retorna a exceção lançada durante uma ação assíncrona do agente, se o agente falhar. Retorna nulo se o agente não falhar.
Sintaxe
A seguir está a sintaxe.
(agent-error agentname)
Parameters - 'nomedagente' é o agente para o qual a função de erro do agente deve ser definida.
Return Value- Retorna a exceção lançada durante uma ação assíncrona do agente se o agente falhar. Retorna nulo se o agente não falhar.
Exemplo
Um exemplo de como isso é usado é mostrado no programa a seguir.
(ns clojure.examples.example
(:gen-class))
(defn Example []
(def my-date (agent(java.util.Date.)))
(send my-date + 100)
(await-for 100 my-date)
(println (agent-error my-date)))
(Example)
No programa acima, estamos forçando a ocorrência de uma exceção ao incrementar o valor de uma variável de data que está errada. Isso causará uma exceção e com a ajuda da instrução 'prinltn', será enviado para a tela.
Resultado
O programa acima produz a seguinte saída.
Exception in thread "main" java.lang.RuntimeException: Agent is failed, needs
start, compiling:(C:\Users\Administrator\demonew\src\demonew\main.clj:9:1)
at clojure.lang.Compiler.load(Compiler.java:7239)
at clojure.lang.Compiler.loadFile(Compiler.java:7165)
at clojure.main$load_script.invoke(main.clj:275)
at clojure.main$init_opt.invoke(main.clj:280)
at clojure.main$initialize.invoke(main.clj:308)
at clojure.main$null_opt.invoke(main.clj:343)
at clojure.main$main.doInvoke(main.clj:421)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:383)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.lang.RuntimeException: Agent is failed, needs restart
at clojure.lang.Util.runtimeException(Util.java:225)
at clojure.lang.Agent.dispatch(Agent.java:238)
at clojure.core$send_via.doInvoke(core.clj:1995)
at clojure.lang.RestFn.invoke(RestFn.java:445)
at clojure.lang.AFn.applyToHelper(AFn.java:160)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at clojure.core$apply.invoke(core.clj:636)
at clojure.core$send.doInvoke(core.clj:2006)
at clojure.lang.RestFn.invoke(RestFn.java:425)
at clojure.core$await_for.doInvoke(core.clj:3177)
at clojure.lang.RestFn.invoke(RestFn.java:423)
at clojure.examples.example$Example.invoke(main.clj:6)
at clojure.examples.example$eval12.invoke(main.clj:9)
at clojure.lang.Compiler.eval(Compiler.java:6782)
at clojure.lang.Compiler.load(Compiler.java:7227)
... 11 more
clojure_agents