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?