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编程

  

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top