这个问题在这里已有答案:
从ESP8266WebServer的文档这里https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer它显示server.on这样的语法
server.on("/", handlerFunction);
我不明白这条线在做什么。
server.on ( "/admin.html", []() { Serial.println("admin.html"); server.send ( 200, "text/html", PAGE_AdminMainPage ); } );
我特别不明白[]()
是什么。其余的我得到了。
这就是众所周知的“lambda表达”。这是C ++和许多其他语言支持的东西(C不支持)。
Lambda表达式用于允许语言操作函数。在这种情况下,lambda表达式允许您使用“匿名函数”,以便您可以将处理程序传递给server.on()
,而不必将其声明为具有名称的函数。
[]
部分允许您指定“捕获” - lambda函数可用的变量。 ()
部分是您声明函数时的常规函数参数列表。而{}
部分当然是函数的代码。
在这种情况下,没有捕获,没有参数,所以[]() { code... }
。
您可以在https://en.cppreference.com/w/cpp/language/lambda#Syntax上阅读有关C ++ lambda表达式的更多信息