Estou tentando verificar a igualdade entre duas matrizes de bytes: estou executando o seguinte código:
;; 1
(assert (= (byte-array [0 0 0 0]) (byte-array [0 0 0 0])))
;; 2
(assert (= (seq (byte-array [0 0 0 0])) (seq (byte-array [0 0 0 0]))))
A primeira afirmação falha, mas a segunda é aprovada. Este é um comportamento definido? Preciso registrar um relatório de bug?
Eu esperava que o operador de igualdade transmitisse essas duas afirmações.
Se você olhar o Guia de Igualdade do Clojure , a primeira frase da seção Resumo responde a esta pergunta:
Como os arrays Java (que
byte-array
retornam) são objetos mutáveis e você está passando dois arrays diferentes na primeira asserção, a falha é esperada.Na segunda asserção, quando o tempo
=
percorreu as sequências preguiçosas retornadas porseq
, ambas são sequências imutáveis com os mesmos valores em cada uma, portanto a asserção passa conforme o esperado.Há muitas informações valiosas nesse guia de igualdade, por isso vale a pena estudá-lo. E também é bom lembrar que no Clojure é melhor se ater a valores imutáveis, e não a coisas como arrays Java, se quiser raciocinar sobre seu código. É daí que vêm as grandes vitórias.