如何在Lua的if条件中获取函数的第二个返回值?
问题解答
你写的这段代码没法正常工作,原因是Lua对多返回值的处理规则:当函数调用作为索引、赋值等单值场景的表达式时,只会保留第一个返回值。所以a()[2]实际上是取了函数a返回的第一个值1,然后尝试访问它的索引2,这显然会触发错误(数字类型没有索引)。
下面给你几种正确的实现方式:
方式1:用变量接收,忽略不需要的返回值
这是最直观、可读性最高的写法:
local function a() return 1, true end local _, second_val = a() -- 用下划线`_`忽略第一个返回值 if second_val == true then print("yes") end
方式2:用select函数直接提取第二个返回值
select(n, ...)可以直接取出可变参数里的第n个值,函数的多返回值会被当作可变参数传入:
local function a() return 1, true end if select(2, a()) == true then print("yes") end
方式3:把返回值转为table后索引访问
把函数调用包裹在大括号里,会自动将所有返回值转为table的元素,之后就能通过索引访问第二个值:
local function a() return 1, true end if {a()}[2] == true then print("yes") end
内容的提问来源于stack exchange,提问作者Dadkhah
相关产品推荐
相关产品推荐

