声明
割り当て
- 変数の値を変更するか、フィールドのテーブルを変更します
- 複数の割り当ては、最初の等号の右のすべての要素のLUAは、割り当ての前に評価されます
- 数が変数の値の数未満である場合、変数が過剰ゼロに設定されています
- 初期化の変数は、各変数は初期値を割り当てる必要があります
- 関数の戻り値の複数の収集
x,y = y,x --变量交换
a[i], a[j] = a[j], a[i]
-- 值的个数小于变量的个数
x, y, z = 1, 5 -- z = nil
x, y = 1, 5, 8 -- x = 1, y = 5
ローカル変数ブロック
- 地元のローカル変数を作成します。
- ローカル変数のスコープはその宣言するために限定されているブロックを
- ブロックは、実行可能、実行可能A制御構造、または機能、またはブロックされ
x = 10
local i = 1
while i < x do
local x = i * 2
print(x) -- 2, 4, 6 ...
i = i + 1
end
print(x) -- 10
if i > 20 then
local x
x = 20
print(x + 2) -- 22
else
print(x) -- 10
end
print(x) -- 10
インタラクティブモード各行はブロックとして理解され、直ちに実行され、結果が異なっていてもよいです
ブロックの明示的な定義
do
-- code block
end
ローカル変数を使用してみてください
- ローカル変数に高速グローバル変数より
- 地球環境を汚染しないでください
- ローカル変数は、ガベージコレクタの解放を容易にするため、この障害のその範囲消えて通常、
- LUAはとしてローカル変数を宣言します文入力文を許可し、どのような状況の下で、ローカル変数宣言を入力し、治療
- ローカル変数のスコープは、宣言文の最後のブロックまで、最初から宣言しました
- 宣言は、初期割り当てを含んでいてもよいです
- 複数の割り当ては、余分な値が破棄された場合、追加の変数がnilに設定しました
- それがnilに設定されます割り当てられていません
-- 习惯写法
local foo = foo -- 全局变量 foo 的值赋给局部变量 foo, 用来保存全局变量的值
制御構造
- 、ELSEIF、もし、しばらくのために最後まで明示的なターミネータ
- 明示的な繰り返しターミネータがあるまで、
- 制御構造は、条件式の任意の値であってもよいです
もし
if 条件表达式 then else end
if a < 0 then
a = 0
end
if a < b then
return a
else
return b
end
-- lua 不支持 switch
if op == "+" then
r = a + b
elseif op == "-" then
r = a - b
elseif op == "*" then
r = a * b
elseif op == "/" then
r = a / b
else
error("invalid operation")
end
同時に
- 試験条件、しばらくそれがある場合はfalse、ループ終了
- そうでなければ、ブロックが実行され、プロセスが繰り返されます
local i = 1
while a[i] do
print(a[i])
i = i + 1
end
繰り返し...まで
- 条件があるまで、ループの本体を実施してきた真のエンド
repeat
line = io.read()
until line ~= ""
- LUAで声明の中で
- 試験条件を含むループ内のローカル変数のスコープに
-- 这在 lua 中是可以执行的
local sqr = x / 2
repeat
sqr = (sqr + x / sqr) / 2
local error = math.abs(sqr ^ 2 - x)
until error < x / 10000
数値について
- 変数VARのEXP2、EXP3増分各変化から変化EXP1(インクリメントおよび実行を行います)
- EXPは、1デフォルトオプションです。
for var = exp1, exp2, exp3 do
-- 执行体
end
for i = 10, 1, -1 do
print(i) -- 10, 9, 8,...
end
詳細については、
- 3つの式サイクルは、サイクルの開始前の-time評価
- 制御変数は、自動的にローカル変数、ループ本体のためのステートメントを宣言され、中に見ることができます
- サイクル制御変数の終わりには存在しません。
- あなたは、サイクルの終わりに制御変数にアクセスする必要がある場合は、制御変数の値が別の変数に保存する必要があります
- サイクル中に制御変数の値を変更しないでください
- あなたはのための正常終了前に早期に終了するbreak文を使用することができます
ジェネリックについて
- すべての値を横断することにより、イテレータの機能
- ipairs()は、反復するために使用されています
- 私は各サイクルあるインデックスの新しい値が割り当てられ、vがインデックスの対応する要素の値が与えられます
for i,v in ipairs(a) do
print(v)
end
-- 打印 table 中的 key 值
for k, in pairs(t) do
print(k)
end
共通の型の二種類
- ループサイクル変数はローカル変数です
- これは、ループ変数に代入するべきではありません
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
-- 将名称转换成它在一周中的位置,索引为字符串,值为对应的位置,方便查找,逆向 table
revDays = {["Sunday"] = 1, ["Monday"] = 2 ,["Tuesday"] = 3, ["Wednesday"] = 4, ["Thursday"] = 5, ["Friday"] = 6, ["Saturday"] = 7}
x = "Tuesday"
print(revDays[x]) -- 3 打印 Tuesday 的位置
revDays = {}
for k,v in pairs(days) do
revDays[v] = k
end
与リターンを破ります
- 彼らが使用されている現在のブロックのうち
- 1サイクルを終了させるためのブレークは、アウトのみ内部ループのではなく、外側のループの外にそれが含まれています
- 休憩を実行した後、外側のループの外にジャンプしていきます
- リターン機能が戻るか、単純なエンド機能を実行します
- 実際には任意の関数の最後に暗黙のリターンを持っています
- 関数が値を返す必要がない場合には、あなたは最後にreturn文を追加する必要があります
- 壊し、最後の文は唯一つのブロックで返す(文のような最後のブロック、次のようになります。最後に、他の文まで前)
- 返品またはbreak文を実行することはできませんので、後
local i = 1
while a[i] do
if a[i] == v then
break -- 条件语句块中的最后一条语句
end
i = i + 1
end