在Lua声明如果奇怪

时间:2013-11-16 02:50:31

标签: if-statement lua

好吧所以我是Lua语言的新手,所以这可能是一个非常愚蠢的问题,但我遇到了以下声明,我不知道这意味着什么(即使经过一些搜索)

if (...) then

   -- Doing some stuff

end

...是什么意思?

2 个答案:

答案 0 :(得分:3)

vararg functions中使用了{p> ...。它的值是所有“额外”参数的列表(即那些跟随当前函数的最后一个命名参数的参数。)

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

因此if语句实际上意味着“如果第一个可变参数存在且不是falsenil。”

示例:

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(...)测试是否给出了任何参数。)

答案 1 :(得分:1)

函数参数中使用

...来表示该函数是可变参数。它可以在函数内部用作表达式,表示函数的额外参数。

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

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