Lua


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

プログラミング言語Luaについての簡単なTIP

参考資料:




変数の型

変数はいかなる型の値も格納することができる。
数値と文字列は場所によって要求される型に自動変換されて渡される。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
可変引数 ... を使うと不特定数の引数を取得可能。
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
ユーザーデータ。プログラム作者が独自に実装したデータ形式

コメント

--
そこから行末までがコメントになる。
--[[
複数行のコメント
]]

制御構造

ループ構造の途中で抜けるには break を使う。ただし、 break はendの直前である必要がある(単に"do break end"を挿入するだけでよい)。
while
while exp do block end
repeat
repeat block until exp
if
if exp then block { elseif exp then block} [ else block ] end
for
for Name = exp1 , exp2 [, exp3] do block end
Nameがexp1からexp2になるまでexp3ずつ進む間くり返される。条件式の評価はループ開始前の1度だけ。
for key , value in pairs( table ) do block end
tableのすべてのkey, valueについて繰り返す
for key , value in ipairs( table ) do block end
tableの整数keyを1から順番に最初にvalueにnilが表れるまで繰り返す
for s1 , s2 , ... in string.gmatch( s , pattern ) do block end
文字列sからpatternに一致する文字列を検索しキャプチャされた文字列をs1, s2, ...に返すことを、一致する文字列がある限り繰り返す。キャプチャとはpatternにおいて"("と")"で挟まれた部分で、上の例ではpattern内で1番目のキャプチャ部分がs1に、2番目がs2に返る。キャプチャを省略すると一致部分全体を返す。

演算子

優先順位

↑優先順位
or
and
<     >     <=    >=    ~=    ==
..
+     -
*     /     %
not   #     - (符号)
^
↓優先順位

関係演算子

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が返る。

文字連結演算子

文字連結演算子はドット二つ .. 。右結合。
"Hello, " .. "world!"
s .. t
"Name: " .. n

累乗演算子

ハット記号 ^ 。右結合。
x ^ n

長さ演算子

ナンバー記号 # 。文字列の長さ(バイト単位)やテーブルの要素数を返す。
#t