演算子


算術演算子 関係演算子 論理演算子( C などの 論理演算子と異なるので注意 )


or.and.not


if a == 10 and s == "test" then print( "test" ); end if a == 10 or s == "test" then print( "test" ); end if ( not a ) then end
POINT
-- or : 最初の引数が false か nil 以外ならその値を返す a = a or 10;
連結演算子 | 文字列連結
print( "foo" .. "bar" );



代入


多重代入OK (右辺の値, 左辺の添え字がすべて評価された後, 代入 ) POINT x, y = y, x; // 入れ替え可能. 関数も複数返すことが可能. function f() return 1, 2; end print( f );


論理


if ( "aaa" ~= "bbb" ) print ( "diff" ) end if ( "aaa" == "bbb" ) print ( "same" ) end



TableConstructor


SYNTAX TableConstructor ::= { [fieldlist] } Lua にも Constructor がある tbl{ f1=val, f2=val ... } <-> tbl( {...} ) // Tbl関数に Arg として渡した関数. -> DefalutArg の修理とか可能. a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 } [exp1] = exp2 形式のフィールド name = exp 形式のフィールドは ["name"] = exp と等価
do local t = {} t[f(1)] = g t[1] = "x" -- 最初のexp t[2] = "y" -- 2番目のexp t.x = 1 -- temp["x"] = 1 t[3] = f(x) -- 3番目のexp t[30] = 23 t[4] = 45 -- 4番目のexp a = t end



関数呼び出し


( lisp と同様の設計. -> lua_type() -> functioncall ::= prefixexp args... POINT prefixexp と args が評価される ---> prefixexp が関数なら 与えられた引数で関数 call ret = func( arg1, arg2, ...) Function は [ 何かの入力をうけとり ] ---> [ 何かの( 処理 | 判断 | 保存 )をして ] --> [ 何かを出力する ] [ 何か ]を { int, float, vec3, string } と種類を限定することも可能. Ret がない場合は nil をかえす


method として扱う


( OO 的な呼び出しをする. ) POINT functioncall ::= prefixexp `:´ Name args v:name(...) == v.name( v, ... ); == [ method ] t:f(x) という表現は t.f(t,x); 終端呼び出し( 呼び出し側の stack entry を再利用する ) return functioncall のような呼び出し形式は