etc
-
はじめて代入を行う前の変数の値は nil
-
関数の仮引数はローカル関数の一種
-
Luaの文法では、文字列1つだけを与えて関数を呼び出す時は、()を省略できる
-
require "common.lua"
のように書ける -
print testprint .. "OK"
のようなものは駄目。- 文字列を連結したりする時は、
print( testprint .. "OK" )
のように、()でくくる必要がある
- 文字列を連結したりする時は、
-
ゼロ埋め
「ゼロパディング」「ゼロサプライ」などと呼ばれているもので、
数値の表記桁数を揃えるのに 0 を書き加える。
string.format( "%04d", num )
↑で num = 53 の時 0053 と出力する。
入門Luaから覚え書き
文字列は '' "" [[]] で囲む
- '' "" でのエスケープ文字は \
- [[]] は、文字列中に ' や " が入っている時などに用いると便利
- [[]] では、エスケープ文字が無効
- [[]] 内で途中改行をすると、途中改行も含む
; は行末を表す
1行に複数のコマンドが書ける
インクリメントは x = x + 1
- Ruby のように
x += 1
とは書けない - C のように
x++
とは書けない
for ループ変数 = 初期値,最終値,増分値 do
- 増分値は負も可能
- ループ変数は、forループ内のみで使えるローカル変数
テーブルには関数を入れられる
table.maxn は、maxnがテーブルtableの1要素になる、ということ。
Luaではfalseとnil以外はすべて真
-1も0も真。
or を使ったデフォルト値の代入
a = a or 10
a が nil か false の時、10が代入される
local を宣言していない変数は、すべてグローバル変数になる
計算や結合で強制変換されるのは数値と文字列だけ
テーブルなどは tonumber()
や tostring()
で変換する
#は長さオペレータ
- #配列名 で、配列の要素数を返す
-
table.maxn(配列名)
と書かなくても良い
-
- #文字列変数名 で、文字列の長さを返す
-
string.len(文字列変数名)
と書くのと同じ
-
テーブルは番号とフィールド名を混在できる
{ 123, 45, score={5,6}, date="2014-01-03" }
は
{ [1]=123, [2]=45, score={5,6}, date="2014-01-03" }
と同じ。
テーブルそのものを比較する
テーブルの中身が同一だとしても「別のテーブル」と認識されて、
別ものと判定される。
名前なし関数が作れる
テーブルの1フィールドで作ったりできる。
しかし、名前なし関数は、まず使わないとは思う。
引数が可変個の関数が作れる
function f(...) のように、 ... は可変個を表す。
関数内で local arg = { ... } とすることで、引数を全部受け取れる。
複数の値を返すのに、スタックが用いられている
- i,j=test() で、test内でreturn 1,2 とすると、i=1,j=2になる
- x,y=1,2 だと、x=1,y=2になる
- a,b=b,a で、変数間の値入れ替えができる
新しいデータ型を作る
- XY(1,2) のように作れる
- テーブルかCのuserdata型で作ることができる
- 入門Luaでは、メタテーブルを作るのに、メタメソッドとコンストラクタを用意している
代入文の結果は値として使えない
Luaの = による代入は、1つの実行単位でしかない。
プログラミング言語Lua公式解説書から覚え書き
table.maxn(a) と #a は異なる
- maxn は最大インデックスを返す
- #a は入っている個数を返す
文字列の比較演算は、アルファベット順に比較
"acai" < "acorde" のような比較ができる。
複数の変数に値を代入する際は a,b,c=0,0,0 とする
a,b,c=0 は a=0;b=nil;c=nil になる。
pairs() forループでフィールドをすべて検査
for i in pairs(test) do print(i) end
ipairs() forループでテーブルを順に検査
for i,v in ipairs(test) do print(v) end