1. ホーム
  2. スクリプト・コラム
  3. ルア

luaのクロージャとテーブルや関数のいくつかの表現を理解する。

2022-01-06 10:35:52

しばらく前、lua言語を勉強していたとき、lua中国語チュートリアルを読んでいて、クロージャの項を何度か読みましたが、クロージャの概念はまだ曖昧で、何のことだかはっきり理解することが出来ませんでした

最近、仕事があまり忙しくなかったので、独学でluaの知識を身につけたのですが、2時間以上読んで初めて、クロージャという問題に遭遇しました。まあ、初めて見たときはcloseとか関係あるのかと思ってましたけど。しかし、より多くのあなたは、より多くの混乱を見下ろすので、インターネット上でマスターの多くは、後で見るように、ここに記録し、学ぶことを学ぶために物事を書く参照してくださいすることはありません。

Lua関数でも変数であり、テーブルに格納することができ、また、パラメータの関数、または戻り値にすることができ、実際には、Luaクロージャは、おそらくこのように理解することができます クロージャ(関数名){関数抽象、upvalue、環境}、関数抽象は、関数本体です。

upvalue:組み込み関数は、外部関数によって作成されたすべてのローカル変数にアクセスすることができますが、これらのローカル変数は、外部ローカル変数または組み込み関数のupvalueと呼ばれ、upvalue実際には値ではなく、変数を参照してくださいです。

function newCounter()
 local i = 0 
 return function()
 i = i + 1 
  return i 
 end 
end 



上記の例では、iはupvalueです

簡単に言えば、クロージャは関数と、それが適切にアクセスできるupvalueです。upvalueはネストされた関数の外部関数のローカル変数です。この関数は一般に別の関数の内部で定義されており、外部関数の内部で定義されたメンバ変数、パラメータ、グローバル関数にアクセスすることができる。また、この関数は関数を返すこともできます。

表と関数

I.

Lib = {}
Lib.foo = function (x,y) retrun x+ y end
Lib.goo = function (x) retrun x end;



ii.

Lib = {
foo = function (x,y) retrun x+ y end
goo = function (x) retrun x end;
}



iii.

Lib = {}
Lib = {}
functio Lib.foo (x,y) retrun x+ y end
 function Lib.goo (x)retrun x end;


以上、luaのクロージャとテーブルと関数について理解しましたので、必要であれば参考にしてください。