继续学习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(...)'会放弃第二个值。 –