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
{
}

但是,如果我删除 (tag) 周围的括号,则会导致编译错误。那么为什么 Lua 允许无括号参数(即“def”)而不是无括号 var(本例中为表)参数?

4

1 回答 1

4

来自Lua 编程

如果函数只有一个参数,并且该参数是文字字符串或表构造函数,则括号是可选的:

我对您上述情况的理解是 tag 是一个局部变量(既不是文字字符串也不是表构造函数),所以test(tag)总是需要括号。您不需要括号,"def"因为test(tag)返回一个接受单个字符串的函数,并且该函数立即应用于"def".

于 2009-09-13T16:07:48.723 回答