我试图理解为什么第二个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/

10-16 11:12