【发布时间】:2013-11-29 14:40:32
【问题描述】:
好吧,我是 Lua 语言的新手,所以这可能是一个超级愚蠢的问题,但我遇到了以下语句,但我不知道它是什么意思(即使经过一些搜索)
if (...) then
-- Doing some stuff
end
... 是什么意思?
【问题讨论】:
标签: if-statement lua
好吧,我是 Lua 语言的新手,所以这可能是一个超级愚蠢的问题,但我遇到了以下语句,但我不知道它是什么意思(即使经过一些搜索)
if (...) then
-- Doing some stuff
end
... 是什么意思?
【问题讨论】:
标签: if-statement lua
... 用于vararg functions。它的值是所有“额外”参数的列表(即当前函数的最后一个命名参数之后的参数。)
(...)(与括号中的任何其他表达式一样)将结果调整为一个值(列表中的第一个值。)
所以if 语句实际上意味着“如果第一个可变参数存在并且不是false 或nil。”
例子:
local function f1(...)
if (...) then
return true
else
return false
end
end
local function f2(x, ...)
if (...) then
return true
else
return false
end
end
print(f1()) -- false
print(f1(1)) -- true
print(f1(1, 2)) -- true
print(f1(1, nil)) -- true
print(f1(nil, 2)) -- false
print(f2()) -- false
print(f2(1)) -- false
print(f2(1, 2)) -- true
print(f2(1, nil)) -- false
print(f2(nil, 2)) -- true
在顶层(即不在function . . . end 表单内)它仍然以相同的方式工作,但当前函数是一个块(即脚本或模块。)
如果是模块,(...) 给出模块名称。但是if(...) 测试将没有用,因为第一个参数始终是一个字符串。
如果是脚本,(...) 会给出第一个命令行参数(if(...) 会测试是否给出了任何参数。)
【讨论】:
if (...) then 与 if ... then 完全相同,因为该语句本身会将列表调整为一个元素。
...用在函数参数中,表示函数是可变参数的。它可以在函数内部用作表达式,表示函数的额外参数。
例如,这个函数接受一个固定参数加上可变参数:
function vafun(num, ...)
if (...) then
for _, v in ipairs{...} do
print(v)
end
else
print("empty var")
end
end
if(...) 测试变量参数部分是否为空。
vafun(3, 4, 5)
vafun(3)
vafun()
输出:
4
5
empty var
empty var
【讨论】: