0
respostas

Dúvida sobre uma das perguntas sobre Clojure & Schemas

Estou com uma duvida em uma parte especifica da resposta dessa pergunta:

Pergunta: Podemos usar schemas para definir regras em vetores. Qual a vantagem e desvantagem dessa abordagem?

Resposta: Vetores com 0 ou mais elementos de um único tipo são tranquilos de modelar e lidar no dia a dia. Vetores que misturam tipos de acordo com posições são complicados por se assemelham a objetos ou mapas, mas mais restritos.

Complemento da resposta Vetores por exemplo não permitem a inexistência de valores como um mapa permitiria ao representar o mesmo tipo de dado.

Minha duvida: Pra mim ficou dificil entender o complemento da resposta. "Vetores nao permite a inexistencia de valores", mas se eu crio um schema de vetor e utilizomo como null ele funciona:

(def Plano [s/Num])
(s/validate nil Plano) ; Return nil, nao da exception

(def Plano [s/Num])
(s/validate [] Plano) ; Return [], nao da exception

"como um mapa permitiria ao representar o mesmo tipo de dado.". Essa parte eu também não entendi, porque se eu crio um schema com um mapa os campos são obrigatorios também, por exemplo:

(def Pessoa {:id s/Num :nome s/Str})
(s/validate Pessoa {:id 123}) 
; Execution error (ExceptionInfo) at schema.core/validator$fn (core.clj:155).
; Value does not match schema: {:nome missing-required-key}

Me podem ajudar a entender o que eu estou interpretando de errado?