Parâmetros de descarte do Lambda
Observação
Este artigo é uma especificação de recurso. A especificação serve como o documento de design para o recurso. Ele inclui mudanças de especificação propostas, juntamente com as informações necessárias durante o design e desenvolvimento do recurso. Estes artigos são publicados até que as alterações de especificações propostas sejam finalizadas e incorporadas na especificação ECMA atual.
Pode haver algumas discrepâncias entre a especificação do recurso e a implementação concluída. Essas diferenças são capturadas nas notas pertinentes da Language Design Meeting (LDM).
Você pode saber mais sobre o processo de adoção de especificações de recursos no padrão de linguagem C# no artigo sobre as especificações .
Questão campeã: https://github.com/dotnet/csharplang/issues/111
Resumo
Permitir que os descartes (_
) sejam usados como parâmetros de lambdas e métodos anônimos.
Por exemplo:
- lambdas:
(_, _) => 0
,(int _, int _) => 0
- Métodos anónimos:
delegate(int _, int _) { return 0; }
Motivação
Os parâmetros não utilizados não precisam ser nomeados. A intenção dos descartes é clara, ou seja, não são utilizados/descartados.
Design detalhado
Parâmetros do método - §15.6.2 Na lista de parâmetros de um método lambda ou anônimo com mais de um parâmetro chamado _
, tais parâmetros são parâmetros de descarte.
Nota: se um único parâmetro é nomeado _
então é um parâmetro regular por razões de compatibilidade com versões anteriores.
Os parâmetros de descarte não introduzem nomes em nenhum escopo.
Observe que isso implica que eles não fazem com que nenhum nome de _
(sublinhado) seja oculto.
Nomes simples (§12.8.4) Se K
for zero e o simple_name aparecer dentro de um bloco e se o bloco (ou um bloco anexo's) espaço de declaração variável local (Declarações - §7.3) contém uma variável local, parâmetro (com exceção dos parâmetros de descarte) ou constante com nome I
, Em seguida, o simple_name refere-se a essa variável, parâmetro ou constante local e é classificado como uma variável ou valor.
Âmbitos de aplicação - §7.7 Com exceção dos parâmetros de descarte, o âmbito de um parâmetro declarado numa expressão lambda (§12.19) é o corpo de função anónima dessa expressão lambda. Com exceção dos parâmetros de descarte, o âmbito de um parâmetro declarado numa expressão de método anónima (§12.19) é o bloco dessa expressão de método anónima.
Seções de especificações relacionadas
- Parâmetros correspondentes - §12.6.2.2
C# feature specifications