2016-06-12 76 views
2

我想了解为什么第二个毫秒()计时器不工作,因为我期望。使用lambda表达式时是否有一些封装是我不明白的?或者,也许我只是没有看到什么!意外的lambda行为与Arduino的C++

环路()不打印第二个表达式,第一个作用:

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;}}; 
} 

回答

2

的第一拉姆达被称为是因为你把它称为,第二不叫......通话()加入拉姆达的最后一个。

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... :-) 
} 
+0

太棒了!我想我的预期问题的B部分是真的。 –