Por que ele compila e funciona?
Não consigo encontrar nenhuma informação sobre isso.
Vou te dar um exemplo. Baseado na biblioteca SwiftSyntax.
@CodeBlockItemListBuilder statementsBuilder: () -> CodeBlockItemListSyntax
Então, digamos que temos uma função com esse parâmetro. A função espera um fechamento com CodeBlockItems e o resultBuilder criará CodeBlockItemList como resultado.
myFunction {
item1
item2
item3
...
}
Parece que posso passar um itemList (um objeto do tipo resultante CodeBlockItemListSyntax
) para isso também:
myFunction {
itemList
}
Não entendo por que podemos fazer isso. Por que isso funciona? Como funciona?!
Na verdade, podemos até misturar objetos Item com objetos ItemList! Mas a saída é um pouco estranha... o que me confunde ainda mais.
PS
Fiquei bastante surpreso ao saber que ainda não existem tags "construtor de resultados" nem "sintaxe rápida" no StackOverFlow.
CodeBlockItemListBuilder.buildExpression
Simplesmente há uma sobrecarga dissoCodeBlockItemListSyntax
. Veja a documentação .CodeBlockItemListBuilder.FinalResult
é um alias de tipo paraCodeBlockItemListSyntax
.Presumivelmente, eles adicionaram essa sobrecarga porque adicionar novas instruções a um bloco de código existente é algo comum de se fazer, e essa sobrecarga torna isso mais conveniente: