继续学习Lua。
我编写了一个函数,可以删除每行的第一句话,并将结果作为修改后的行的表返回。奇怪的是,在这样的函数中,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)
为什么首先需要“期望数字”?
来自
table.insert
文档:插入元素值到列表的位置pos,上移元素list [pos],list[pos + 1],···,list[#list]。默认情况下,pos的值为#list+1,这样调用table.insert(t,x)就会把x插入到列表t的末尾。
没有提到对
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
。 - Egor Skriptunofflocal nofirst = string.gsub(...)
将丢弃第二个值。 - Nicol Bolas