以下函数getTank()
适用(如果未用作打印fluidName
的函数)。当我返回值然后尝试在函数之外访问它们时,问题就出现了。例如,结果为'attempt to concatenate string and nil'
,其线路为:mon2.write(returnedVariable)
,例如在该功能之外。Lua函数多个返回值,打印(返回值)尝试连接字符串的结果和零
如果我只是做到以下几点:
for k,v in pairs(tableInfo) do amount=v.amount end
print(amount)
之外的功能,它提供了正确的值。
function getTank(tankPeriph)
-- This has been tested and works
local tableInfo = tankPeriph.getTankInfo("unknown")
local fluidRaw, fluidName, fluidAmount, fluidCapacity
for k,v in pairs(tableInfo) do
fluidRaw = v.rawName
fluidName = v.name
fluidAmount = v.amount
fluidCapacity = v.capacity
end
return fluidRaw, fluidName, fluidAmount, fluidCapacity
end
function dispTanks()
-- working on it
-- TANK 0
mon2.setCursorPos(rowPos, ironTank0Col)
mon2.clearLine()
local fluidRaw, fluidName, fluidAmount, fluidCapacity = getTank(irontank0)
mon2.write("Iron Tank 0 (" .. fluidName .. ") : " .. fluidAmount)
-- TANK 1
mon2.setCursorPos(rowPos, ironTank1Col)
mon2.clearLine()
local fluidRaw, fluidName, fluidAmount, fluidCapacity = getTank(irontank1)
mon2.write("Iron Tank 1 (" .. fluidName .. ") : " .. fluidAmount)
-- TANK 2
mon2.setCursorPos(rowPos, ironTank2Col)
mon2.clearLine()
local fluidRaw, fluidName, fluidAmount, fluidCapacity = getTank(irontank2)
mon2.write("Iron Tank 2 (" .. fluidName .. ") : " .. fluidAmount)
-- TANK 3
mon2.setCursorPos(rowPos, ironTank3Col)
mon2.clearLine()
local fluidRaw, fluidName, fluidAmount, fluidCapacity = getTank(irontank3)
mon2.write("Iron Tank 3 (" .. fluidName .. ") : " .. fluidAmount)
-- TANK 4
mon2.setCursorPos(rowPos, ironTank4Col)
mon2.clearLine()
local fluidRaw, fluidName, fluidAmount, fluidCapacity = getTank(irontank4)
mon2.write("Iron Tank 4 (" .. fluidName .. ") : " .. fluidAmount)
end
你用两个成语'for k,v in pairs(t)do ... end'来捕获最后一次循环迭代的值,以便以后使用。由于'pairs()'不能保证任何特定的表遍历顺序(事实上,对于相同的表内容,可能会有不同的顺序),所以这可能不会做你认为它正在做的事。 – RBerteig