Não entendi o "this" em "defprotocol Carregavel" sendo que ele parece nunca ser usado.
Não entendi o "this" em "defprotocol Carregavel" sendo que ele parece nunca ser usado.
Oii, Alessandro.
Em Clojure, quando você define um protocolo com defprotocol, ele cria uma espécie de "contrato" que tipos podem implementar. Dentro das funções do protocolo, o primeiro parâmetro é sempre a referência ao objeto que implementa aquele protocolo, por convenção, é chamado de this, mas poderia ter qualquer nome.
Por exemplo:
(defprotocol Carregavel
(carregar [this peso]))
(defrecord Mochila [capacidade]
Carregavel
(carregar [this peso]
(println "Carregando" peso "kg na mochila de capacidade" (:capacidade this) "kg")))
Repare que em (carregar [this peso] ...), o this representa a instância concreta de Mochila que está usando o protocolo. Assim, podemos acessar os campos dela normalmente com (:capacidade this).
Ao usar:
(def minha-mochila (->Mochila 30))
(carregar minha-mochila 10)
A saída será:
Carregando 10 kg na mochila de capacidade 30 kg
Ou seja, o this é como o self no Python ou this em Java, serve para acessar os dados da instância que está executando o método do protocolo.
Se puder dizer qual curso e aula está fazendo, posso te ajudar melhor.
Entendido