0
我偶然發現了lua的奇怪行爲。代碼例如:Lua:將多個結果從函數傳遞給表構造函數
function foo()
local t = {'a', 'b', 'c'}
return unpack(t)
end
function bar()
local t = {'x', 'y'}
return unpack(t)
end
b = { foo(), bar() }
for k,v in pairs(b) do
print(k,v)
end
此代碼的結果是:
1 a
2 x
3 y
所以,從foo()
結果所有丟棄除了第一個元素。問題是,爲什麼有些元素被丟棄? 我已經簡要地檢查了lua 5.2手冊,但是我沒有看到這種行爲的解釋。
多麼不方便。我希望,有一些重要的目的是以這種不直觀的方式來表達這部分語言。 無論如何,感謝您的快速回答。現在我知道我沒有犯一些愚蠢的小錯誤。 – pashkoff
是的,有非常重要的目的。函數可以返回任意數量的結果,並且可以在不同的調用中返回不同數量的結果。這用於標記錯誤條件 - 如果發生錯誤,您只返回* nil *,* errorString *。想象一下,你想在多個文件名上調用'io.open' - 你可以期望每個元素都是* nil *或文件句柄。如果多個結果展開,您將不得不處理突然出現在數組中的錯誤字符串的特殊情況。而且,在編譯時不能知道返回值的數量。 –
downvote的任何原因? Lua以這種方式工作並不是我的錯。 –