Bagikan melalui


Parameter yang diabaikan Lambda

Nota

Artikel ini adalah spesifikasi fitur. Spesifikasi berfungsi sebagai dokumen desain untuk fitur tersebut. Ini termasuk perubahan spesifikasi yang diusulkan, bersama dengan informasi yang diperlukan selama desain dan pengembangan fitur. Artikel ini diterbitkan sampai perubahan spesifikasi yang diusulkan diselesaikan dan dimasukkan dalam spesifikasi ECMA saat ini.

Mungkin ada beberapa perbedaan antara spesifikasi fitur dan implementasi yang selesai. Perbedaan tersebut dicatat dalam catatan rapat desain bahasa (LDM) yang relevan.

Anda dapat mempelajari lebih lanjut tentang proses untuk mengadopsi speklet fitur ke dalam standar bahasa C# dalam artikel tentang spesifikasi .

Isu Utama: https://github.com/dotnet/csharplang/issues/111

Ringkasan

Izinkan variabel tak terpakai (_) dimanfaatkan sebagai parameter dari lambda dan metode anonim. Misalnya:

  • lambda: (_, _) => 0, (int _, int _) => 0
  • metode anonim: delegate(int _, int _) { return 0; }

Motivasi

Parameter yang tidak digunakan tidak perlu diberi nama. Niat membuang jelas, yaitu tidak digunakan/dibuang.

Desain terperinci

Parameter metode - §15,6,2 Dalam daftar parameter metode lambda atau anonim dengan lebih dari satu parameter bernama _, parameter tersebut adalah parameter buang. Catatan: jika satu parameter diberi nama _, maka itu adalah parameter biasa untuk alasan kompatibilitas ke belakang.

Parameter diskard tidak memperkenalkan nama apa pun ke ruang lingkup mana pun. Perhatikan bahwa ini menyiratkan mereka tidak menyebabkan nama dengan _ (digarisbawahi) disembunyikan.

Nama sederhana (§12,8,4) Jika nol dan simple_name muncul dalam blok dan jika blok (atau ruang deklarasi variabel lokal blokyang tertutup (Deklarasi - §7,3) berisi variabel lokal, parameter (dengan pengecualian parameter buang) atau konstanta dengan nama , kemudian simple_name mengacu pada variabel, parameter, atau konstanta lokal tersebut dan diklasifikasikan sebagai variabel atau nilai.

Cakupan - §7,7 Dengan pengecualian parameter buang, cakupan parameter yang dideklarasikan dalam lambda_expression (§12,19) adalah anonymous_function_body dari lambda_expression tersebut Dengan pengecualian parameter buang, cakupan parameter yang dideklarasikan dalam anonymous_method_expression (§12,19) adalah blok dari anonymous_method_expressiontersebut.