0
respostas

Erro ao executar o código passado na aula

Olá. Tudo bem? Fiz o código que o professor passou na ala mas por algum motivo está me retornando esse erro. Já refiz várias vezes o código e o erro sempre retorna. Já olhei no github da aula também mas a mesma coisa acontece. Alguém consegue me dar um help?

O erro é esse:

Syntax error (ClassCastException) compiling at (C:\Users\Leticia\Documents\clojure-estudos\curso\src\hospitalNovo\aula3.clj:36:1).
class hospitalNovo.aula3$carrega_se_nao_existe cannot be cast to class clojure.lang.IAtom (hospitalNovo.aula3$carrega_se_nao_existe is in unnamed module of loader clojure.lang.DynamicClassLoader @1d96d872; clojure.lang.IAtom is in unnamed module of loader 'app')

Full report at:
C:\Users\Leticia\AppData\Local\Temp\clojure-16250126248415735880.edn

O código é esse

(defn carrega-paciente [id]
  (println "Carregando" id)
  (Thread/sleep 1000)
  {:id id, :carregado-em (h.logic/agora)})

;(pprint (carrega-paciente 15))
;(pprint (carrega-paciente 30))

(defn carrega-se-nao-existe
  [cache id carregadora]
  (if (contains? cache id)
    cache
    (let [paciente (carregadora id)]
      (assoc cache id paciente))))

(pprint (carrega-se-nao-existe {} 15, carrega-paciente))
(pprint (carrega-se-nao-existe {15 {:id 15}}, 15, carrega-paciente))



(defprotocol Carregavel
  (carrega! [this id]))

(defrecord Cache
  [cache carregadora]
  Carregavel (carrega! [this id]
               (swap! carrega-se-nao-existe cache id carregadora) ;atualiza o cache
               (get @cache id)));cache atualizado

(def pacientes (->Cache (atom {}), carrega-paciente))
(pprint pacientes)
(carrega! pacientes 15)
(pprint pacientes)