[英]Lua Function Multiple Return Values, Print(returnvalue) Results in Attempt to Concatenate String and Nil
以下函数getTank()
起作用(例如,如果不用作打印fluidName
的函数)。 当我返回值然后尝试在函数外部访问它们时,问题就来了。 结果是'attempt to concatenate string and nil'
: mon2.write(returnedVariable)
例如在函数之外。
如果我简单地执行以下操作:
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
function getTank(tankPeriph)
-- This has been tested and works
local tableInfo = tankPeriph.getTankInfo("unknown") -- Local to the getTank function.
for k,v in pairs(tableInfo) do
local fluidRaw = v.rawName -- local to this for loop
local fluidName = v.name -- local to this for loop
local fluidAmount = v.amount -- local to this for loop
local fluidCapacity = v.capacity -- local to this for loop
end
return fluidRaw, fluidName, fluidAmount, fluidCapacity -- Returning the values of global variables (which are nil).
end
如我上面编辑过的代码片段所示,您的本地人不在您认为的本地,并且您没有从函数中正确返回它们的值。 将这些变量的局部声明移到for循环之外(如果需要,可将其保留在for循环中,尽管我真的无法想象您会这样做,因为这样只会得到循环中的最后一个值)功能应该“起作用”。
“ local”限定词将范围限制为块或块,因此getTank()中循环中的局部变量作用域为循环; 在循环外,其值将丢失。 因此,当getTank返回时,它返回的变量尚未在函数范围内定义,因此它们均为nil。 有关有用的示例,请参见http://www.lua.org/manual/5.1/manual.html#2.6 。
但是由于这似乎无法解决您的问题,因此我认为您还有一个问题,即local tableInfo
是空表,这意味着tankPeriph.getTankInfo("unknown")
返回空表(不是nil
,而是{}
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.