从返回的对中提取单个值

时间:2016-12-15 10:05:17

标签: lua

外部api调用返回一对值:

('status', 'standby')

我认为可以进行如下任务:

theQuery, theResponse = returnVal

这样我想要的值(第二个)最终会出现在响应中,但这看起来并没有起作用。

我真正想要测试的是theResponse ='standby'

if theResponse=='standby' then …

1 个答案:

答案 0 :(得分:2)

一些解决方案:

您可以使用unpack():

theQuery, theResponse = unpack(returnVal)

或者,您可以“手动”

进行操作
theQuery = returnVal[1]
theResponse = returnVal[2]

或者更改您的支票

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

如果您的returnVal是包含2个值的表格,则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返回一个值,这是一个包含2个值的表。

如果您现在a, b = myfunc()a将被分配到表格{1,2},b将被nil分配。struct Cell { Int rowId; Int colId; } int matData[MAX_ROWS][MAX_COLS]; int GetCellInMatrix(const Cell& cellIndex) { Cell newCellIndex = cellIndex + m_matrixOffset ; while (newCellIndex.rowId > MAX_ROWS) { newCellIndex.rowId -= MAX_ROWS; } while (newCellIndex.colId > MX_COLS) { newCellIndex.y -= MAX_COLS; } return data[newCellIndex.rowId][newCellIndex.colId]; } 没有解压缩返回的表。