2016-06-12 86 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部分是真的。 –