Неожиданное поведение лямбды C++ с Arduino

Я пытаюсь понять, почему второй таймер millis() работает не так, как я ожидал. Есть ли какая-то инкапсуляция, которую я не понимаю при использовании лямбда-выражений? А может я просто чего-то не вижу!

второе выражение в 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;}};
}

person Jim from Princeton    schedule 12.06.2016    source источник


Ответы (1)


Первая лямбда была вызвана, потому что вы ее вызвали, вторая не была вызвана... Добавьте вызов () в самый конец лямбды.

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... :-)
}
person WhiZTiM    schedule 12.06.2016
comment
Великолепно! Я предполагаю, что часть B моих ожидаемых проблем была правдой. - person Jim from Princeton; 13.06.2016