学習LUA文の記事

声明

割り当て

  1. 変数の値を変更するか、フィールドのテーブルを変更します
  2. 複数の割り当ては、最初の等号の右のすべての要素のLUAは、割り当ての前に評価されます
  3. 数が変数の値の数未満である場合、変数が過剰ゼロに設定されています
  4. 初期化の変数は、各変数は初期値を割り当てる必要があります
  5. 関数の戻り値の複数の収集
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

ローカル変数ブロック

  1. 地元のローカル変数を作成します。
  2. ローカル変数のスコープはその宣言するために限定されているブロックを
  3. ブロックは、実行可能、実行可能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

ローカル変数を使用してみてください

  1. ローカル変数に高速グローバル変数より
  2. 地球環境を汚染しないでください
  3. ローカル変数は、ガベージコレクタの解放を容易にするため、この障害のその範囲消えて通常、
  4. LUAはとしてローカル変数を宣言します入力文を許可し、どのような状況の下で、ローカル変数宣言を入力し、治療
  5. ローカル変数のスコープは、宣言文の最後のブロックまで、最初から宣言しました
  6. 宣言は、初期割り当てを含んでいてもよいです
  7. 複数の割り当ては、余分な値が破棄された場合、追加の変数がnilに設定しました
  8. それがnilに設定されます割り当てられていません
-- 习惯写法
local foo = foo -- 全局变量 foo 的值赋给局部变量 foo, 用来保存全局变量的值

制御構造

  1. 、ELSEIF、もし、しばらくのために最後まで明示的なターミネータ
  2. 明示的な繰り返しターミネータがあるまで、
  3. 制御構造は、条件式の任意の値であってもよいです

もし

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

同時に

  1. 試験条件、しばらくそれがある場合はfalse、ループ終了
  2. そうでなければ、ブロックが実行され、プロセスが繰り返されます
local i = 1
while a[i] do
    print(a[i])
    i = i + 1
end

繰り返し...まで

  1. 条件があるまで、ループの本体を実施してきた真のエンド
repeat
    line = io.read()
until line ~= ""
  1. LUAで声明の中で
  2. 試験条件を含むループ内のローカル変数のスコープに
-- 这在 lua 中是可以执行的
local sqr = x / 2
repeat
    sqr = (sqr + x / sqr) / 2
    local error = math.abs(sqr ^ 2 - x)
until error < x / 10000

数値について

  1. 変数VARのEXP2、EXP3増分各変化から変化EXP1(インクリメントおよび実行を行います)
  2. EXPは、1デフォルトオプションです。
for var = exp1, exp2, exp3 do
    -- 执行体
end

for i = 10, 1, -1 do
    print(i) -- 10, 9, 8,...
end

詳細については、

  1. 3つの式サイクルは、サイクルの開始前の-time評価
  2. 制御変数は、自動的にローカル変数、ループ本体のためのステートメントを宣言され、中に見ることができます
  3. サイクル制御変数の終わりには存在しません。
  4. あなたは、サイクルの終わりに制御変数にアクセスする必要がある場合は、制御変数の値が別の変数に保存する必要があります
  5. サイクル中に制御変数の値を変更しないでください
  6. あなたはのための正常終了前に早期に終了するbreak文を使用することができます

ジェネリックについて

  1. すべての値を横断することにより、イテレータの機能
  2. ipairs()は、反復するために使用されています
  3. 私は各サイクルあるインデックスの新しい値が割り当てられ、vがインデックスの対応する要素の値が与えられます
for i,v in ipairs(a) do
    print(v)
end

-- 打印 table 中的 key 值
for k, in pairs(t) do
   print(k) 
end

共通の型の二種類

  1. ループサイクル変数はローカル変数です
  2. これは、ループ変数に代入するべきではありません
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. 彼らが使用されている現在のブロックのうち
  2. 1サイクルを終了させるためのブレークは、アウトのみ内部ループのではなく、外側のループの外にそれが含まれています
  3. 休憩を実行した後、外側のループの外にジャンプしていきます
  4. リターン機能が戻るか、単純なエンド機能を実行します
  5. 実際には任意の関数の最後に暗黙のリターンを持っています
  6. 関数が値を返す必要がない場合には、あなたは最後にreturn文を追加する必要があります
  7. 壊し、最後の文は唯一つのブロックで返す(文のような最後のブロック、次のようになります。最後に、他の文まで前)
  8. 返品またはbreak文を実行することはできませんので、後
local i = 1
while a[i] do
    if a[i] == v then 
        break  -- 条件语句块中的最后一条语句
    end
    i = i + 1
end

おすすめ

転載: www.cnblogs.com/door-leaf/p/12309514.html