lua文法自分用メモ
コメント
-- 1 line
--[[ multi line ]]--
print(33)
= 'hoge'
= は対話環境で飲み使える。 =の場合はカッコ要らない。
変数の型を得る
type("hi")
型の種類
nil
ブーリアン
数値(number)
文字列(string)
関数
ユーザーデータ: cのソースを格納
スレッド: Luaはコルーチンをサポートしている
テーブル: 連想配列, indexとfieldがペア
終端の;セミコロンはあってもなくてもいい
String
to_str, to_number
tostring(12.3)
tonumber("1")
concat
> a="a".."b"; print(a);
length
#"abc"
substring
string.sub("hoge", 0, 2)
include?
string.find("hoge", "h") -- => 1
"hoge":find("o") -- => 2
メソッドの呼び方は2通りある
テーブル
Luaには配列、ハッシュ共になくテーブルしかない。
arrayもhashもテーブルの1用法として実現する。
a={1, 2, 3} h={a=1, b=2, c=3} -- 各アクセスは以下のとおり ハッシュの h.a でアクセスできるシンタックスシュガーがいいかんじ print( a[1] ) print( h["a"], 'or', h.a )
Array
literal
a={1, 2, 3}
追加(index で位置指定)
table.remove( a, index)
取り出し
table.insert( a, index, 3.3 )
size
table.getn( a )
function definition関数定義
function sum(a1, a2)
return a1+a2
end
function value?
hoge = function(a1, a2)
return a1+a2
end
print( hoge(3, 3))
比較演算子
hoge ~= fuga : 否定
あとは大体同じ
false, nil 以外は全て真になる。0, "" なども真。
制御文
if
if true then print(33) elseif 33==33 then print(35) else print(34) end
条件部分に()はあってもなくてもいいけど、thenは必須
if( true ) then print( 'hoge' ) end
for
for i=1, 10 do print( i ) end for i=1 , 10, 2 do print( i ) end
これは()つけるとエラー。メソッド扱いになるっぽい
for( i=1, 3) do end -> lua: hoge.lua:8: '<name>' expected near '('
for each_with_index
a = {2, 3, 4} for i, value in ipairs(a) do print( i, value ) end
each
data = {a=5, b=6, c=7} for key, value in pairs(data) do print( key, value ) end
論理演算子
and
or
or使って、初期化されてなければ初期化
a= a or 33
外部ファイル読み込み
dofile('hoge.lua')
eval
f = loadstring( "print(33)" )
f() -- call