我试图理解为什么第二个millis()计时器不能像我预期的那样工作。使用lambdas时是否有一些我不理解的封装?或者也许我只是没有看到什么!
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;}};
}
答案 0 :(得分:2)
第一个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... :-)
}