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(本例中为表)参数?
答案 0 :(得分:3)
如果函数只有一个参数,并且该参数是文字字符串或表构造函数,则括号是可选的:
我对你的上述情况的理解是tag是一个局部变量(既不是文字字符串也不是表构造函数),因此test(tag)
总是需要括号。你不需要"def"
左右的括号,因为test(tag)
返回一个接受单个字符串的函数,该函数立即应用于"def"
。