2017-06-10 6 views
1

NodeMCUのcronモジュールを使用していくつかのスケジュールを立てています。しかし、私はまた、年単位でスケジュールを立てることができるほか、現在の時刻が希望の日付範囲の間にある場合にのみコールバックを実行できるようにする機能も追加したいと考えています。コールバック呼び出し間で関数スコープの変数値を維持する

上記の動作をするには、チェックを行うためにコールバック内に日付範囲の値を保持する必要がありますが、Luaは呼び出し間で関数スコープ変数を保持していないようです。ここで

は私がESPlorerを使用してESP-12Fにアップロードサンプルコードです:

> outervar = 1 
> cron.schedule("* * * * *", function(e) 
        local innervar = outervar 
        if innervar == 1 then 
          print("Every minute") 
        end 
       end) 
> Every minute 
> Every minute 
> outervar=0 
> 

私は2回Every minute印刷をしましょう(つまり、スケジュールは2つの呼び出しのために働いていた)が、できるだけ早く私はoutervar=0それを作ったとして、停止しました。outervarinnervarに伝播しています。

コールバック呼び出しの間に値innervarを保持する必要があります。どんな助けもありがとうございます。要するに私は@EgorSkriptunoff ..私はあなたがJSでのようにすぐに呼び出された関数を使用していることがわかり、あなたが戻ってきている

おかげ

答えて

3
do 
    local innervar = outervar 

    function sched_callback(e) 
     if innervar == 1 then 
     print("Every minute") 
     end 
    end 
end 

cron.schedule("* * * * *", sched_callback) 
+0

おかげC.内のローカル(関数スコープ)と同様の機能静的変数が必要すぐに呼び出される関数オブジェクトです。しかし、関数を返すたびに、 'outervar'にかかわらず' innervar'値をどのように保持するのでしょうか?私はいつも毎回のスケジュールで毎分 "外殻"をもう一度 "innervar"に割り当てるつもりだと思いますか? 'outervar'が外に0に変更されても、' innervar'は1の値を持ちますか?また、私は今ESPで試してみるだろうし、少し説明を加えてもらえますか? Upvoted too – ritesht93

+0

異なる 'cron.schedule'呼び出し間で' innervar'値を保持するようにコードを修正しました(コールバック関数は複数のスケジュールで再利用可能です)。 –

+0

あなたは誤解していると思います。私は別の 'cron.schedule'でコールバック関数を再利用する必要はありません。 'sched_callback'が複数回呼び出されたときに' innervar'値を保持したいと思います。 'outervar'が外に変わったとしても、私はコールバックのために' innervar'値を変更したくありません。 – ritesht93

関連する問題