Lua には非常に優れた括弧なしの呼び出し構文があり、関数クロージャーと組み合わせると、次のように記述できます。
local tag = 1
function test(obj)
return
function(str)
return
function (tbl)
tbl.objtag = tag
tbl.objname = str
return tbl
end
end
end
test (tag) "def"
{
}
test tag "def" --error
{
}
ただし、(タグ)の括弧を外すとコンパイルエラーになります。では、なぜ Lua は括弧なしのパラメーター (つまり "def") を許可し、括弧なしの var (この場合はテーブル) パラメーターを許可しないのでしょうか?