言葉はスコープ:別の関数は、関数内で入れ子になったときに、関数が外部関数のローカル変数にアクセスすることができ、そのような特徴語は、スコーピングと呼ばれています
table.sort(名前、functin(N1、N2) の戻りグレード[N1]>グレード[N2] エンド) //無名関数は、外部関数のN1、N2の内部にアクセスすることができます
ファーストクラス値:LUA関数値であり、彼は戻り値として、パラメータの関数として、変数を提示することができます
テスト機能は、() ローカルI = 0 return関数() I ++は ... エンド エンド も、私はローカル変数の外にはどこと呼ばれ、関数として//戻り値Luaの上位値であります
クロージャ:外部関数外部関数によって保持された内部プラス外部のローカル変数(上位値)の関数(すなわち、植物である)を含む関数のインスタンスを呼び出すことによって生成されます
閉鎖組成:作成上位値+内部+外部関数関数外部関数(クロージャ機能)
例:
テスト機能() ローカルI = 0 復帰機能()// tailcall I + = 1つの 戻りI 端は エンド C1 =テスト() C2 =試験()// C1、C2は同じ機能に内蔵された、同じローカル変数異なるクロージャの上記2つの異なるインスタンス 独立上位値の//閉鎖、コールテスト()新しい閉鎖生産する プリント(C1()) - > 1つの 印刷(C1を()) - - >各呼び出し繰り返し呼び出しが2 //呼び出しの最後の値を覚え、その= 1 iが有している ので、> 1つの//異なるクロージャ異なる上位値-プリント(C2()) プリント(C2を( )) - > 2
イテレータでのクロージャの使用:反復子が最後にコールし、成功した状態のコールを保持する必要がある、ちょうど閉鎖機構を使用して実装することができます
イテレータだけビルダーに注意を払う必要がありますイテレータを作成し、そして:(彼自身循環なし)
list_iter関数(T) ローカルI = 0 ローカル= N-table.getn(T) リターン機能() I = Iが+ 1 Iに<= N-戻り、次いでT [I] END IF エンド エンド list_iter //ここ植物です、内側閉鎖の新しいクロージャを生成する各呼び出しは上位値(T、I、N-)を含む ように生成されたクロージャ一旦クロージャの各関数コールが記録の状態に基づいてされるように//、及び次の一覧に戻ります
イテレータを使用します:
Ctrl + Cを押してコードをコピーします