DSLの実装におけるLua Closures
-
07-07-2019 - |
質問
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(この場合はテーブル)パラメーターを許可しないのですか?
解決
Luaでのプログラミングから:
関数に1つの引数があり、この引数がリテラル文字列またはテーブルコンストラクターである場合、括弧はオプションです:
上記の状況についての私の理解は、タグはローカル変数(リテラル文字列でもテーブルコンストラクターでもない)であるため、 test(tag)
は常に括弧が必要だということです。 test(tag)
は単一の文字列を受け入れる関数を返すため、" def"
を括弧で囲む必要はありません。すぐに" def"
に適用されます。
所属していません StackOverflow