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.
Mas na implementação dele, ele não usa o this dentro da função "carrega!".