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
それを作ったとして、停止しました。outervar
はinnervar
に伝播しています。
コールバック呼び出しの間に値innervar
を保持する必要があります。どんな助けもありがとうございます。要するに私は@EgorSkriptunoff ..私はあなたがJSでのようにすぐに呼び出された関数を使用していることがわかり、あなたが戻ってきている
おかげ
おかげC.内のローカル(関数スコープ)と同様の機能静的変数が必要すぐに呼び出される関数オブジェクトです。しかし、関数を返すたびに、 'outervar'にかかわらず' innervar'値をどのように保持するのでしょうか?私はいつも毎回のスケジュールで毎分 "外殻"をもう一度 "innervar"に割り当てるつもりだと思いますか? 'outervar'が外に0に変更されても、' innervar'は1の値を持ちますか?また、私は今ESPで試してみるだろうし、少し説明を加えてもらえますか? Upvoted too – ritesht93
異なる 'cron.schedule'呼び出し間で' innervar'値を保持するようにコードを修正しました(コールバック関数は複数のスケジュールで再利用可能です)。 –
あなたは誤解していると思います。私は別の 'cron.schedule'でコールバック関数を再利用する必要はありません。 'sched_callback'が複数回呼び出されたときに' innervar'値を保持したいと思います。 'outervar'が外に変わったとしても、私はコールバックのために' innervar'値を変更したくありません。 – ritesht93