Sdílet prostřednictvím


Parametry zahození lambda

Poznámka

Tento článek je specifikace funkce. Specifikace slouží jako návrhový dokument pro funkci. Zahrnuje navrhované změny specifikace spolu s informacemi potřebnými při návrhu a vývoji funkce. Tyto články se publikují, dokud nebudou navrhované změny specifikace finalizovány a začleněny do aktuální specifikace ECMA.

Mezi specifikací funkce a dokončenou implementací může docházet k nějakým nesrovnalostem. Tyto rozdíly jsou zachyceny v příslušných poznámkách schůzky o návrhu jazyka (LDM).

Další informace o procesu přijetí specifikací funkcí do jazyka C# najdete v článku o specifikacích .

Problém šampiona: https://github.com/dotnet/csharplang/issues/111

Shrnutí

Povolit použít zahození (_) jako parametr pro lambdy a anonymní metody. Například:

  • lambda: (_, _) => 0, (int _, int _) => 0
  • anonymní metody: delegate(int _, int _) { return 0; }

Motivace

Nepoužité parametry nemusí být pojmenované. Záměr zahození je jasný, tj. nepoužité či zahozené.

Podrobný návrh

Parametry metody - §15.6.2 V seznamu parametrů lambda nebo anonymní metody s více než jedním parametrem s názvem _, takové parametry jsou zahazovací parametry. Poznámka: Pokud je jeden parametr pojmenován _ pak je to běžný parametr z důvodu zpětné kompatibility.

Parametry pro zahození nezavedou žádné názvy do žádných oborů. Všimněte si, že tím nezpůsobují skrytí žádných názvů _ (s podtržítkem).

Jednoduché názvy (§12.8.4) Pokud je K nula a simple_name se zobrazí v bloku a pokud blok(nebo ohraničený blok' s) místní prostor deklarace proměnných (Deklarace - §7.3) obsahuje místní proměnnou, parametr (s výjimkou parametrů zahození) nebo konstanta s názvem I, pak simple_name odkazuje na tuto místní proměnnou, parametr nebo konstantu a je klasifikována jako proměnná nebo hodnota.

Rozsahy - §7.7 S výjimkou parametrů zahození, rozsahem parametru deklarovaného v lambda_expression (§12.19) je anonymous_function_body tohoto lambda_expression S výjimkou parametrů zahození je rozsah parametru deklarovaného v anonymous_method_expression (§12.19) blok tohoto anonymous_method_expression.