繼續學習Lua。Lua table.insert不接受字符串參數
我寫了一個函數,從每一行中刪除第一句,並將結果作爲修改後的行的表格返回,其中第一句刪除。奇怪的是,table.insert
在這樣的功能中表現怪異。
function mypackage.remove_first(table_of_lines)
local lns = table_of_lines
local new_lns = {}
for i=1,#lns do
table.insert(new_lns,string.gsub(lns[i],"^[^.]+. ","",1))
end
return new_lns
end
意外的是,這給了我以下錯誤。
[string "function mypackage.remove_first(table_of_lines)..."]:5: bad argument #2 to 'insert' (number expected, got string)
爲什麼「數字預期」在第一位?在列表中的位置POS
從table.insert
文檔
插入元件值,移位了 元素列表[POS],列表[POS + 1],...,列表[#list]。 pos的缺省值爲 爲#list + 1,這樣一個調用table.insert(t,x)就會在列表t的末尾 處插入x。
沒有關於table.insert
的型號要求的說法。好的,我決定修改這個例子。
function mypackage.remove_first(table_of_lines)
local lns = table_of_lines
local new_lns = {}
for i=1,#lns do
local nofirst = string.gsub(lns[i],"^[^.]+. ","",1)
table.insert(new_lns,nofirst)
end
return new_lns
end
現在一切正常。你能解釋一下這裏發生了什麼嗎?
'string.gsub'返回兩個值而不是一個,和'table.insert'的另一個(重載)版本被調用 –
嗯,其中一個值對'print'是不可見的? – minerals
@礦物質:它不是看不見的。當有一個表達式導致多個值,並將其分配給更少的值時,多餘的值將被丟棄。所以'local nofirst = string.gsub(...)'會放棄第二個值。 –