Поделиться через


Параметры лямбда-отмены

Заметка

Эта статья является спецификацией компонентов. Спецификация служит проектным документом для функции. Она включает предлагаемые изменения спецификации, а также информацию, необходимую во время проектирования и разработки функции. Эти статьи публикуются до тех пор, пока предложенные изменения спецификации не будут завершены и включены в текущую спецификацию ECMA.

Может возникнуть некоторое несоответствие между спецификацией компонентов и завершенной реализацией. Эти различия были зафиксированы в соответствующих заметках встречи по проектированию языка (LDM) .

Дополнительные сведения о процессе внедрения спецификаций функций в стандарт языка C# см. в статье о спецификациях .

Проблема чемпиона: https://github.com/dotnet/csharplang/issues/111

Сводка

Разрешить использовать подстановочные символы (_) в качестве параметров лямбда-выражений и анонимных методов. Например:

  • лямбда-коды: (_, _) => 0, (int _, int _) => 0
  • анонимные методы: delegate(int _, int _) { return 0; }

Мотивация

Неиспользуемые параметры не должны называться. Намерение отбросов ясно, т. е. они неиспользованы или отброшены.

Подробный дизайн

Параметры метода — §15.6.2 В списке лямбда-метода или анонимного метода с несколькими параметрами с именем _, такие параметры являются отменными параметрами. Примечание. Если один параметр называется _ то это обычный параметр по причинам обратной совместимости.

Параметры игнорирования не добавляют никаких имен в области видимости. Обратите внимание, что они не приводят к сокрытию имен _ (с подчеркиванием).

Простые имена (§12.8.4) Если K равно нулю и simple_name находится в блоке , и если блок (или заключающий блок) локального пространства объявления переменной (объявления — §7.3) содержит локальную переменную, параметр (за исключением параметров-пустышек) или константу с именем I, то simple_name относится к этой локальной переменной, параметру или константе и классифицируется как переменная или значение.

Области — §7.7 За исключением параметров отмены, область параметра, объявленного в лямбда-выражении (§12.19), — это тело анонимной функции этого лямбда-выражения. За исключением параметров отмены, область параметра, объявленного в анонимном методе (§12.19), — это блок этого анонимного метода.

  • Соответствующие параметры — §12.6.2.2