Lua-基礎解析(データ型と関数)
3841 ワード
ps:編集長はcococos 2 d学習者(開発者とは言えないが、結局編集長は学習過程にある)で、この間編集長は学習したcococos 2 d-xだったが、市販されているほとんどの会社がluaの開発モデルを採用しているため、編集長はcocos 2 d-luaの方向に回らざるを得なかった.編集者は初心者なので、私が勉強している間に出会った問題だけを記録しています.
テーブル:
tableはluaの中で最も重要なデータ型である(正確にはタイプと呼ぶべきではなく、集合でよりイメージ的な説明、または関連配列である).関連配列:インデックスindex-valueモードを使用して、インデックス(nilの任意のタイプを除くため、tableはネストされています)と対応する値を関連付けます.作成:a={}/a={1=「first」、2=「second」、「a」=3}tabelは動的に割り当てられたオブジェクトで、プログラムは1つの参照またはポインタしか持っていないため、作成時にtableのコピーを生成したり、新しいtableを作成したりしないため、宣言する必要はありません.表示:tableの要素を操作する方法はa[「x」]とa.xの2つの方法がある.区別:a[「x」は文字列「x」を用いてtableをインデックスすることを表す.a.xは変数xを用いてtableをインデックスすることを示す
テーブル:
tableはluaの中で最も重要なデータ型である(正確にはタイプと呼ぶべきではなく、集合でよりイメージ的な説明、または関連配列である).関連配列:インデックスindex-valueモードを使用して、インデックス(nilの任意のタイプを除くため、tableはネストされています)と対応する値を関連付けます.作成:a={}/a={1=「first」、2=「second」、「a」=3}tabelは動的に割り当てられたオブジェクトで、プログラムは1つの参照またはポインタしか持っていないため、作成時にtableのコピーを生成したり、新しいtableを作成したりしないため、宣言する必要はありません.表示:tableの要素を操作する方法はa[「x」]とa.xの2つの方法がある.区別:a[「x」は文字列「x」を用いてtableをインデックスすることを表す.a.xは変数xを用いてtableをインデックスすることを示す
a={}
k="X"
a[k]=10;
a[20]="great"
print(a[k]) --10
print(a["X"]) -- 10
k=20;
print(a[k]) --greate
a["X"]=a["X"]+1; -- 21
print(a["X"])
print(a.X) --a.X “X” table, a[k] k table
print(a.k) -- “K” , nil
#: table , : print(a[#a]) a
操作符
算术操作符:左值=右值(左值:用于表示变量在内存存储中的地址; 右值:表示该地址内存中的存储的值) 。
关系操作符:关系操作符返回的结果都是true或false; 在处理table、函数、userdata,lua采用的是引用的比较方式(即:只有当它们引用同一个对象时,才认为相等)。
逻辑操作符:and、or或not 。
and:第一个操作数为false,则返回第一个操作数;否则返回第二个操作数;
or: 第一个操作数为true,则返回第一个操作数;否则返回第二个操作数;
注释:从上面and和or的判断条件都是按照第一个操作数,因此我们称这种为“短路求值”,表示只有需要时才会去评估第二个操作数。 例如:“x=x or v” 表示: if not x then x = v end
函数:
1.Lua中的函数属于第一类值(可以理解为是一种特殊的变量); 函数实际上是在讨论一个持有该函数的变量;
2.匿名函数:可以将function(x) --body end 视为一种函数的构造表达式(如table的构造是{}一样),然后将函数的构造式的结果称为“匿名函数”。
function derivative(f, delta) delta = delta or 1e-4 return function (x) --function(x) return (f(x + delta) - f(x))/delta end end c = derivative(math.sin) --derivative ( ) print(c(10))
3.クローズ関数(closure):実行時にLuaがfunctionのような形を実行するたびに...endのような式の場合、対応する関数プロトタイプの参照、環境(グローバル変数を検索するためのテーブル)の参照、およびすべてのupvalue参照からなる配列を含む新しいデータオブジェクトが作成されます.このデータ対象は閉パッケージと呼ばれます.このことから,関数はコンパイル期間概念であり,静的であり,閉パケットは実行期間概念であり,動的であることが分かる.
非局所変数:1つの変数が匿名関数によってアクセスされ、外層関数によってアクセスされることを示します.一般的にclosureは、関数にその関数を加えてアクセスするすべての「非局所変数」です.ブログを参照してください.function newCounter() local i = 0 --i return function () -- closure i = i+1 return i end end
http://blog.csdn.net/lidatou/article/details/3866399
4.非大域的な関数local fact = function(n) if n==1 then return 1 else return fact(n-1) --error: fact(n-1) , fact(n-1) , fact( fact nil ) end : local fact fact = function(n) -- local function fact(n) ‘ ’; ( ) , if n==1 then return 1 else return fact(n-1) -- fact , , , ,fact end
5.末尾呼び出し
意味:関数は「エンドコール」を実行した後も、goto文と同様に、関数に関するスタックの情報を保存する必要はありません.主に現在の状態を変えるためです.
表現形式:Luaには
「return()」、すなわち「return関数名(パラメータ)」の呼び出し形式のみが「テール呼び出し」であり、余分な操作はありません.
役割:「テールコール」はスタックスペースを消費しないため、「テールコール除去」を実現することができる.