publication: internal status: draft¶
Uma declaração de unidade, seu literal ou sua operação não apresenta um contrato numérico nominal válido. O diagnóstico aponta o sufixo, a magnitude ou o operador que precisa ser corrigido.
Declare um sufixo não vazio sobre um newtype numérico:
@unit("kg") newtype Mass(decimal)
let parcel = 2.5kgO sufixo deve começar com uma letra ASCII; os demais caracteres podem ser letras ASCII, dígitos e underscore. Um underscore inicial seria absorvido como separador numérico. e ou E seguido de dígito também é reservado pela notação de expoentes. Os sufixos embutidos de números e durações são reservados. Uma anotação deve conter uma única string, e o construtor real deve aceitar o escalar interno.
Um sufixo desconhecido exige a declaração ou seu import. Quando houver dois tipos visíveis com o mesmo sufixo, use nomes de unidade distintos; aliases da mesma declaração não criam uma segunda identidade. Uma sugestão de grafia altera apenas o sufixo e preserva o número.
A magnitude precisa caber no tipo interno. Use um tipo adequado se precisar
de frações ou de uma faixa maior. Um literal com where também precisa
respeitar o predicado, mantendo a construção verificada de
TE162.
Somar, subtrair e comparar exige a mesma unidade. Escalas usam o escalar interno, e conversões entre unidades são explícitas:
@unit("g") newtype Grams(decimal)
let grams = 500g
let kilograms = Mass.new(grams.unwrap() / 1000d)Multiplicar duas unidades ou combinar donos diferentes exige uma implementação explícita. Não há conversão implícita pelo nome do sufixo. Consulte Newtypes.