从返回的对中提取单个值

一个外部 API 调用返回一对值:

('status', 'standby')

我以为可以像这样进行赋值:

theQuery, theResponse = returnVal

这样我想要的值(第二个)就会出现在 theResponse 中,但是这似乎不起作用。

我真正想测试的是 theResponse 是否等于 'standby'

if theResponse=='standby' then …
点赞
用户126769
用户126769

几种解决方案:

你可以使用 unpack()

theQuery, theResponse = unpack(returnVal)

或者手动进行:

theQuery = returnVal[1]
theResponse = returnVal[2]

或者更改你的检查为

if returnVal[2]=='standby' then …

如果 returnVal 是一个有两个值的表,则在 Lua 中没有自动解包,你不能简单地使用 theQuery, theResponse = returnVal

更多解释:

但是和这个很相关的是,Lua 中你可以有一个函数返回多个值,并且它的返回值可以自动解包,例如:

function myfunc()
    return 1,2
end

如果你执行 a, b = myfunc()a 将被赋值为 1,b 被赋值为 2。

如果你只执行 a = myfunc()a 将被赋值为 1,2 将会被丢弃。

注意这与以下方式不同:

function myotherfunc()
    return {1,2}
end

这里 myotherfunc 返回一个只包含两个值的表。

如果你现在执行 a, b = myfunc()a 将被赋值为表 {1,2},b 会是 nil。没有解包返回的表。

2016-12-15 10:13:27