我试图理解为什么第二个millis()计时器不按我期望的那样工作。使用lambda时是否存在一些我不理解的封装?也许我只是看不到东西!
loop()中的第二个表达式不打印,第一个表达式:
unsigned long timerVal = 0;
void setup()
{
Serial.begin(9600);
Serial.println();
}
void loop()
{
[&timerVal](unsigned long currentTime){if(currentTime - timerVal > 1000UL) {Serial.println("Hello World"); timerVal += 1000UL;}}(millis());
[&timerVal](){if(millis() - timerVal > 1000UL) {Serial.println("Why Not Me?"); timerVal += 1000UL;}};
}
最佳答案
之所以调用第一个Lambda,是因为您调用了它,而没有调用第二个Lambda。将调用()
添加到Lambda的末尾。
void loop()
{
[&timerVal](unsigned long currentTime){if(currentTime - timerVal > 1000UL) {Serial.println("Hello World"); timerVal += 1000UL;}}
(millis()); //<--call
[&timerVal](){if(millis() - timerVal > 1000UL) {Serial.println("Why Not Me?"); timerVal += 1000UL;}}
(); /// now, we call... :-)
}
关于c++ - Arduino发生意外的Lambda行为C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37780177/