質問

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" に適用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top