Luaステートメント入門
Luaのステートメントは、代入、制御構造、関数呼び出し、変数宣言をサポートしています。
空のステートメントセグメントは許されないので、;は不正です。
1ステートメントグループ|チャンク
chunck ::= {stat[';']}
([';'] は、文群の後に ; を付けることが任意であることを示すものと思われます)。
2 ステートメントブロック|ブロック
block ::= chunck
stat ::= do block end
ステートメントのブロックをステートメントグループとして明示的に記述することで、ローカル変数のスコープを制御することができます。
3 アサイン|アサインメント
Luaは複数のアサインメントをサポートしています。
多重代入は、右辺の式の値を左辺の値の順に代入する。右側の値はnilで過小評価され、右側の値は破棄される。
b = 1
a,b = 4 -- a = 4,b = nil
+++
Luaが代入を行う場合、右辺の式を全て一度に計算してから代入を行います。
i = 5
i,a[i] = i+1, 7 -- i = 6 ,a[5] = 7
具体的には、以下のようなものがあります。
x,y = y,x -- x, yの値を交換する。
+++
グローバル変数やテーブルのフィールドへの代入操作の意味を、メタテーブルで変更できるようにした。
4 制御構造
4.1 条件文
if [exp]
[block]
elseif [exp]
[block]
else
[block]
end
4.2 ループステートメント
while [exp]
[block]
end
+++
repeat
[block]
until [exp]
なお、repeat文はuntilで終わっていないので、ブロック内で定義したローカル変数はuntil以降の式で使用することができます。
例
a = 1
c = 5
repeat
b = a + c
c = c * 2
until b > 20
print(c) --> 40
+++
4.3 ブレーク&リターン
breakとreturnはブロックの最後にだけ書いてください。どうしてもブロックの途中で書く必要がある場合は、do endブロックをこの二つのキーワードで囲んでください。
do break end
5 Forループ
forループの使い方はいろいろあるので、分けて考えてみましょう。
forの中の式はループ開始前に一度だけ評価され、ループ中は更新されない。
5.1 数値形式
for [名前] = [exp],[exp],[exp] do [ブロック] end
3つのexpは、それぞれ初期値、終了値、ステップを表しています。
3番目のexpのデフォルトは1であり、省略可能である。
a = 0
for i = 1,6,2 do
a = a + i
end
に相当します。
int a = 0;
for (int i = 1; i <= 6;i += 2){ // fetch the equal sign, if the step is negative, then it will take i >= 6
a += i;
}
5.2 イテレータ形式
イテレータ形式で表を出力する場合、表の中に関数があると、出力の順番や数が不定になる(理由は不明ですが、テストしてみました)。
イテレータ形式におけるforループの本質
-- イテレータ、状態テーブル、イテレータの初期値を順に返します。
function mypairs(t)
function iterator(t,i)
i = i + 1
i = t[i] and i -- if t[i] == nil then i = nil; otherwise i = i
return i,t[i]
end
return iterator,t,0
end
-- テーブル
t = {[1]="1",[2]="2"}.
-- 繰り返し for 文の等価形
do
local f, s, var = mypairs(t)
while true do
local var1, var2 = f(s, var)
var = var1
if var == nil then break end
-- statement added to the for loop
print(var1,var2)
end
end
-- 文の繰り返し形式
for var1,var2 in mypairs(t) do
print(var1,var2)
end
--> 1 1
--> 2 2
--> 1 1
--> 2 2
5.2.1 配列形式
ary = {[1]=1,[2]=2,[5]=5}
for i,v in ipairs(ary) do
print(v) --> 1 2
end
1から始まり、数値添え字が終わるか、値がnilになった時点で終了します。
5.2.2 テーブルトラバーサル
table = {[1]=1,[2]=2,[5]=5}
for k,v in pairs(table) do
print(v) --> 1 2 5
end
キーと値のペアのテーブル全体を反復処理する。
イテレータの詳細については、Lua イテレータとジェネリックを参照してください。
この記事の内容は以上です。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン