augment
Acrescentar membros a um blueprint que já existe — sem substituir nada, sem atravessar final nem sealed.
augment é a extensão de um tipo sem herança: métodos, propriedades, operadores e estáticos novos num blueprint que já existe — e nos objetos que já foram criados. É o que outras linguagens chamam de método de extensão ou classe parcial.
dataforge
blueprint Dinheiro(centavos):
action reais():
yield self.centavos / 100
carteira := spawn Dinheiro(1250)
augment Dinheiro:
get texto():
yield $"R$ {self.reais():.2f}"
operator + (outro):
yield spawn Dinheiro(self.centavos + outro.centavos)
assert carteira.texto is "R$ 12.50" // o objeto de antes ganhou
assert (carteira + spawn Dinheiro(50)).centavos is 1300O que augment recusa#
| Tentativa | Por quê |
|---|---|
| substituir um membro que existe | substituir é o papel da herança; um augment que troca comportamento de longe é impossível de depurar |
augment de final blueprint | final promete que o tipo está completo |
augment de sealed de outro arquivo | sealed promete que a família é conhecida |
| acrescentar campo de instância | os objetos que já existem não o teriam |
ver private de outro arquivo | augment não pode ser a porta dos fundos para o que o autor fechou |