「Lua」の編集履歴(バックアップ)一覧はこちら
「Lua」(2013/12/14 (土) 02:22:08) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
プログラミング言語Luaについての簡単なTIP
参考資料:
-[[Lua 5.1 リファレンスマニュアル>http://milkpot.sakura.ne.jp/lua/lua51_manual_ja.html]]
-[[Lua 5.1 Reference Manual>http://www.lua.org/manual/5.1/manual.html]]
----
#contents
----
*変数の型
変数はいかなる型の値も格納することができる。
数値と文字列は場所によって要求される型に自動変換されて渡される。1 + "2" は 3、 "a" .. 1 は "a1"。
変数の型を取得するには type(v) を使う。戻り値は変数vの型を表す文字列。
:nil|変数の初期値。論理的にはfalseと同じく「偽」扱い。
:boolean|ブーリアン。真偽値。trueとfalse。
:number|数値。実数値。精度はdouble。"0x"の16進数表記、"E"の指数表記も可。
:string|文字列。""や''、[[]]で囲う。エスケープシーケンスはCと同じく\(バックスラッシュ)。
以下の4つのリテラルは同等
'"test"\n123'
'"test"\
123'
"\"test\"\n123"
[["test"
123]]
:function|関数。functionで定義される。
function foo(x) block end
foo = function(x) block end
可変引数&bold(){ ... }を使うと不特定数の引数を取得可能。
function bar(...)
a, b = ... -- 可変引数を変数 a, b へ代入。bar(1,3) では a=1, b=3 になる。
t = {...} -- 可変引数をテーブル型変数 t へ代入。bar(1,3)では t={1, 3}になる。
return ... -- 可変引数をそのまま戻り値として返す。bar(1,3)では 1, 3 が返る。
end
:table|テーブル。連想配列。キーにはnilを除く任意の値を指定できる。
整数キーは1から始まる(0ではないので注意)。
t = { 0, name = "a", 1 } -- テーブル作成
t["name"] -- 値は a、 キー("name")は文字列
t.name -- 値は a、 キー("name")は文字列
t[1] -- 値は 0、 キー(1)は数値
t[2] -- 値は 1、 キー(2)は数値
:thread|スレッド。coroutineライブラリで使用。
:userdata|ユーザーデータ。プログラム作者が独自に実装したデータ形式
*コメント
:--|そこから行末までがコメントになる。
--[[
複数行のコメント
]]
*制御構造
ループ構造の途中で抜けるには&bold(){break}を使う。ただし、&bold(){break}はendの直前である必要がある(単に"do break end"を挿入するだけでよい)。
:while|&bold(){while} exp &bold(){do} block &bold(){end}
:repeat|&bold(){repeat} block &bold(){until} exp
:if|&bold(){if} exp &bold(){then} block {&bold(){elseif } exp &bold(){then} block} [&bold(){else} block ] &bold(){end}
:for|&bold(){for} Name = exp1 , exp2 [, exp3] &bold(){do} block &bold(){end}
Nameがexp1からexp2になるまでexp3ずつ進む間くり返される。条件式の評価はループ開始前の1度だけ。
&bold(){for} key , value &bold(){in} pairs( table ) &bold(){do} block &bold(){end}
tableのすべてのkey, valueについて繰り返す
&bold(){for} key , value &bold(){in} ipairs( table ) &bold(){do} block &bold(){end}
tableの整数keyを1から順番に最初にvalueにnilが表れるまで繰り返す
&bold(){for} s1 , s2 , ... &bold(){in} string.gmatch( s , pattern ) &bold(){do} block &bold(){end}
文字列sからpatternに一致する文字列を検索しキャプチャされた文字列をs1, s2, ...に返すことを、一致する文字列がある限り繰り返す。キャプチャとはpatternにおいて"("と")"で挟まれた部分で、上の例ではpattern内で1番目のキャプチャ部分がs1に、2番目がs2に返る。キャプチャを省略すると一致部分全体を返す。
*演算子
**優先順位
↑優先順位&bold(){低}
or
and
< > <= >= ~= ==
..
+ -
* / %
not # - (符号)
^
↓優先順位&bold(){高}
**関係演算子
trueまたはfalseを返す。
== ~= < > <= >=
:==|文字列と数値の型変換は行われず、0 == "0" → false。
:~=|a ~= b ⇔ not ( a == b )。
**論理演算子
nilとfalseは偽、それ以外は真。
:not|not aで、aが真ならfalseが、aが偽ならtrueが返る。
:and|a and bで、aが真ならbの値が、aが偽ならaの値が返る。
:or|a or bで、aが真ならaの値が、aが偽ならbの値が返る。
***orを使った変数の初期化
x = x or a
変数xが未初期化(nil)のときはorの性質により、xに初期値aが代入される。
xがnilでないときはxそのものが代入されるため、xは変化しない。
以下のように、関数の引数省略時のデフォルト値の設定としても使える。
function foo(_x)
local x = _x or 10
end
上の例では、関数の引数(仮引数)_xが省略されたりnilが指定されたり(どちらも_xはnilとなる)したときは、デフォルト値(10)を変数xに代入し、_xに値が指定された時はそれをxに代入する。
***Cの三項演算子っぽい表記法
result = exp and a or b
ただし、aはfalseやnilを返さないこと。
expが真なら a or b となり上の条件よりaが真なのでaが返る。
偽なら exp or b となりexpが偽なのでbが返る。
**文字連結演算子
文字連結演算子はドット二つ &bold(){..}。右結合。
"Hello, " .. "world!"
s .. t
"Name: " .. n
**累乗演算子
ハット記号 &bold(){^}。右結合。
x ^ n
**長さ演算子
ナンバー記号 &bold(){#}。文字列の長さ(バイト単位)やテーブルの要素数を返す。
#t
プログラミング言語Luaについての簡単なTIP
参考資料:
-[[Lua 5.1 リファレンスマニュアル>http://milkpot.sakura.ne.jp/lua/lua51_manual_ja.html]]
-[[Lua 5.1 Reference Manual>http://www.lua.org/manual/5.1/manual.html]]
----
#contents
----
*変数の型
変数はいかなる型の値も格納することができる。
数値と文字列は場所によって要求される型に自動変換されて渡される。1 + "2" は 3、 "a" .. 1 は "a1"。
変数の型を取得するには type(v) を使う。戻り値は変数vの型を表す文字列。
:nil|変数の初期値。論理的にはfalseと同じく「偽」扱い。
:boolean|ブーリアン。真偽値。trueとfalse。
:number|数値。実数値。精度はdouble。"0x"の16進数表記、"E"の指数表記も可。
:string|文字列。""や''、[[]]で囲う。エスケープシーケンスはCと同じく\(バックスラッシュ)。
以下の4つのリテラルは同等
'"test"\n123'
'"test"\
123'
"\"test\"\n123"
[["test"
123]]
:function|関数。functionで定義される。
function foo(x) block end
foo = function(x) block end
可変引数&bold(){ ... }を使うと不特定数の引数を取得可能。
function bar(...)
local a, b = ... -- 可変引数を変数 a, b へ代入。bar(1,3) では a=1, b=3 になる。
local t = {...} -- 可変引数をテーブル型変数 t へ代入。bar(1,3)では t={1, 3}になる。
return ... -- 可変引数をそのまま戻り値として返す。bar(1,3)では 1, 3 が返る。
end
:table|テーブル。連想配列。キーにはnilを除く任意の値を指定できる。
整数キーは1から始まる(0ではないので注意)。
t = { 0, name = "a", 1 } -- テーブル作成
t["name"] -- 値は a、 キー("name")は文字列
t.name -- 値は a、 キー("name")は文字列
t[1] -- 値は 0、 キー(1)は数値
t[2] -- 値は 1、 キー(2)は数値
:thread|スレッド。coroutineライブラリで使用。
:userdata|ユーザーデータ。プログラム作者が独自に実装したデータ形式
*コメント
:--|そこから行末までがコメントになる。
--[[
複数行のコメント
]]
*制御構造
ループ構造の途中で抜けるには&bold(){break}を使う。ただし、&bold(){break}はendの直前である必要がある(単に"do break end"を挿入するだけでよい)。
:while|&bold(){while} exp &bold(){do} block &bold(){end}
:repeat|&bold(){repeat} block &bold(){until} exp
:if|&bold(){if} exp &bold(){then} block {&bold(){elseif } exp &bold(){then} block} [&bold(){else} block ] &bold(){end}
:for|&bold(){for} Name = exp1 , exp2 [, exp3] &bold(){do} block &bold(){end}
Nameがexp1からexp2になるまでexp3ずつ進む間くり返される。条件式の評価はループ開始前の1度だけ。
&bold(){for} key , value &bold(){in} pairs( table ) &bold(){do} block &bold(){end}
tableのすべてのkey, valueについて繰り返す
&bold(){for} key , value &bold(){in} ipairs( table ) &bold(){do} block &bold(){end}
tableの整数keyを1から順番に最初にvalueにnilが表れるまで繰り返す
&bold(){for} s1 , s2 , ... &bold(){in} string.gmatch( s , pattern ) &bold(){do} block &bold(){end}
文字列sからpatternに一致する文字列を検索しキャプチャされた文字列をs1, s2, ...に返すことを、一致する文字列がある限り繰り返す。キャプチャとはpatternにおいて"("と")"で挟まれた部分で、上の例ではpattern内で1番目のキャプチャ部分がs1に、2番目がs2に返る。キャプチャを省略すると一致部分全体を返す。
*演算子
**優先順位
↑優先順位&bold(){低}
or
and
< > <= >= ~= ==
..
+ -
* / %
not # - (符号)
^
↓優先順位&bold(){高}
**関係演算子
trueまたはfalseを返す。
== ~= < > <= >=
:==|文字列と数値の型変換は行われず、0 == "0" → false。
:~=|a ~= b ⇔ not ( a == b )。
**論理演算子
nilとfalseは偽、それ以外は真。
:not|not aで、aが真ならfalseが、aが偽ならtrueが返る。
:and|a and bで、aが真ならbの値が、aが偽ならaの値が返る。
:or|a or bで、aが真ならaの値が、aが偽ならbの値が返る。
***orを使った変数の初期化
x = x or a
変数xが未初期化(nil)のときはorの性質により、xに初期値aが代入される。
xがnilでないときはxそのものが代入されるため、xは変化しない。
以下のように、関数の引数省略時のデフォルト値の設定としても使える。
function foo(_x)
local x = _x or 10
end
上の例では、関数の引数(仮引数)_xが省略されたりnilが指定されたり(どちらも_xはnilとなる)したときは、デフォルト値(10)を変数xに代入し、_xに値が指定された時はそれをxに代入する。
***Cの三項演算子っぽい表記法
result = exp and a or b
ただし、aはfalseやnilを返さないこと。
expが真なら a or b となり上の条件よりaが真なのでaが返る。
偽なら exp or b となりexpが偽なのでbが返る。
**文字連結演算子
文字連結演算子はドット二つ &bold(){..}。右結合。
"Hello, " .. "world!"
s .. t
"Name: " .. n
**累乗演算子
ハット記号 &bold(){^}。右結合。
x ^ n
**長さ演算子
ナンバー記号 &bold(){#}。文字列の長さ(バイト単位)やテーブルの要素数を返す。
#t