[英]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.