Soru:
Fonksiyondaki [] () argümanı ne anlama geliyor?
Mr.B
2020-04-27 15:01:44 UTC
view on stackexchange narkive permalink

ESP8266 AsyncWebserver kitaplığında çalışıyorum ve bu [] (parametre) 'i aşağıda gösterildiği gibi bazı işlevler için bir bağımsız değişken olarak kullanıyorum, ancak bunun ne anlama geldiğini gerçekten bilmiyorum. Bir acemi olarak, bu sözleşmenin ne anlama geldiğini, işlevlerini ve nasıl kullanılacağını merak ediyorum. Umarım buradaki uzmanlar bu konuda bana yardımcı olurlar.

  server.on ("/ page", HTTP_GET, [] (AsyncWebServerRequest * istek) {bazı kodlar ....; request->getParam ("Param1") - >value ();});  
Bir cevap:
Majenko
2020-04-27 15:06:06 UTC
view on stackexchange narkive permalink

Buna lambda ifadesi denir ve bir işlevin içeriğini gerçek bir işlev yazmak ve adını kullanmak yerine anonim olarak bir parametre olarak dahil etmenin bir yoludur .

Şunun kısaltmasıdır:

  void myCallback (AsyncWebServerRequest * istek) {// bazı kodlar ....; request->getParam ("Param1") - >value ();} // ... server.on ("/ page", HTTP_GET, myCallback);  

Birkaç faydası var Çevreleyen kapsamdan yerel değişkenleri "yakalama" yeteneği gibi okunabilirlik pahasına geleneksel işlevler üzerinde.

-1
Her şey bağlantıda açıklanmıştır. Ancak, "server.on" işlevinin içinde göründüğü işlev içinde tanımlanan herhangi bir değişken, "[...]" arasına yerleştirilerek "yakalanabilir", böylece onu lambda ifadesinin içinde kullanabilirsiniz.
Teşekkürler Bay @Majenko bu yararlı
Daha genel olarak, lambda aslında kapsama alanı içinde bir yerdeki bir sınıf bildiriminin kısaltmasıdır, `struct unnamed_lambda_helper {/ * yakalanan yerel değişkenler bu sınıfın veri üyeleridir * / auto operator () (/ * argümanlar burada * /) -> / * dönüş türü burada, belirtilirse * / {/ * gövde burada * /}}; `ve ardından ifade bu sınıfın bir örneğini oluşturur.
Yalnızca C ++ mı?
@PeterMortensen Bu bir C ++ 11 özelliğidir (yani eski derleyiciler bunu desteklemeyebilir). Elbette, diğer dillerin de kendi versiyonları var. Bildiğim kadarıyla C değil.
Teşekkürler @CortAmmon


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 4.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...