If statement Lua中奇怪的if语句

If statement Lua中奇怪的if语句,if-statement,lua,If Statement,Lua,好吧,我是Lua语言的新手,所以这可能是一个超级愚蠢的问题,但我遇到了下面的语句,我不知道它的意思(即使经过一些搜索) ..是什么意思?..在中使用。它的值是所有“额外”参数(即当前函数最后一个命名参数后面的参数)的列表 (…)(与括号中的任何其他表达式一样)将结果调整为一个值(列表中的第一个值) 因此,if语句实际上意味着“如果第一个变量参数存在并且不是false或nil” 示例: local function f1(...) if (...) then return true

好吧,我是Lua语言的新手,所以这可能是一个超级愚蠢的问题,但我遇到了下面的语句,我不知道它的意思(即使经过一些搜索)


..
是什么意思?

..
在中使用。它的值是所有“额外”参数(即当前函数最后一个命名参数后面的参数)的列表

(…)
(与括号中的任何其他表达式一样)将结果调整为一个值(列表中的第一个值)

因此,
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
在顶层(即不在
函数内部…end
表单),它仍然以相同的方式工作,但当前函数是一个块(即脚本或模块)

如果是模块,
(…)
给出模块名称。但是,
if(…)
测试将不会有用,因为第一个参数始终是字符串


如果是脚本,
(…)
给出第一个命令行参数(并且
If(…)
测试是否给出了任何参数)。

在函数参数中用于指示函数是可变的。它可以在函数内部用作表达式,表示函数的额外参数

例如,此函数采用固定参数加变量参数:

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
请看,我会注意到,
if(…)那么
的作用与
if。。。然后
,因为语句本身会将列表调整为一个元素。
4
5
empty var
empty var