2

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 (この場合はテーブル) パラメーターを許可しないのでしょうか?

4

1 に答える 1

4

Luaでのプログラミングから:

関数に 1 つの引数があり、この引数がリテラル文字列またはテーブル コンストラクターのいずれかである場合、かっこは省略可能です。

上記の状況についての私の理解では、タグはローカル変数 (リテラル文字列でもテーブル コンストラクターでもない) であるため、test(tag)常に括弧が必要です。は単一の文字列を受け入れる関数を返し、その関数はすぐに に適用されるため、括弧は必要ありませ"def"test(tag)"def"

于 2009-09-13T16:07:48.723 に答える