Function 缺少值时,函数不返回消息
我正在检查字符串中是否有某些单词。到目前为止,我创建了一个函数,如果单词出现在字符串中,则该函数将存储在表test中,如果单词出现在字符串中,则该函数将打印一条消息,否则将打印其他消息 以下是MWE:Function 缺少值时,函数不返回消息,function,lua,lua-table,Function,Lua,Lua Table,我正在检查字符串中是否有某些单词。到目前为止,我创建了一个函数,如果单词出现在字符串中,则该函数将存储在表test中,如果单词出现在字符串中,则该函数将打印一条消息,否则将打印其他消息 以下是MWE: stg = "In this string the words sky, dog, frog can be found" function highlight(str) local test = {str:find("sky"),str:find("car"),str:find("gla
stg = "In this string the words sky, dog, frog can be found"
function highlight(str)
local test = {str:find("sky"),str:find("car"),str:find("glass")}
local start, fim
for k, v in ipairs(test) do
if v ~= nil then
print("There's something")
elseif v == nil then
print("There's nothing")
end
end
end
highlight(stg)
奇怪的是:函数只识别正在检查的第一个单词,即单词sky。如果stg字符串没有匹配的字,则函数不返回任何内容。连信息都没有,什么都没有
如何让函数检查字符串中是否存在单词并正确打印消息?使用table.pack并按索引进行迭代
-[[
-适用于Lua 5.1和LuaJIT
功能表。打包。。。
返回{n=select,…}
终止
-]]
stg=在这个字符串中可以找到单词sky、dog、frog
函数highlightstr
本地测试=table.packstr:findsky,str:findcar,str:findglass
对于n=1,测试n do
本地v=测试[n]
如果v~=nil,那么
有东西
其他的
什么都没有
终止
终止
终止
highlightstg
使用table.pack并按索引进行迭代
-[[
-适用于Lua 5.1和LuaJIT
功能表。打包。。。
返回{n=select,…}
终止
-]]
stg=在这个字符串中可以找到单词sky、dog、frog
函数highlightstr
本地测试=table.packstr:findsky,str:findcar,str:findglass
对于n=1,测试n do
本地v=测试[n]
如果v~=nil,那么
有东西
其他的
什么都没有
终止
终止
终止
highlightstg
ipairs迭代器在找到nil值时停止,但string.find有时会返回nil。这意味着在循环中,v永远不能为零
一种解决方案是只将搜索字符串放入表中,并在循环中调用string.find:
stg = "In this string the words sky, dog, frog can be found"
function highlight(str)
local test = {"sky","car","glass"}
for k, v in ipairs(test) do
if str:find(v) then
print("There's something")
else
print("There's nothing")
end
end
end
highlight(stg)
ipairs迭代器在找到nil值时停止,但string.find有时会返回nil。这意味着在循环中,v永远不能为零
一种解决方案是只将搜索字符串放入表中,并在循环中调用string.find:
stg = "In this string the words sky, dog, frog can be found"
function highlight(str)
local test = {"sky","car","glass"}
for k, v in ipairs(test) do
if str:find(v) then
print("There's something")
else
print("There's nothing")
end
end
end
highlight(stg)
因为test={1,nil,nil},但是nil相当于删除元素,也就是说,它就像从表中删除一样。好的,但是如果我在这个字符串中有stg=可以找到单词glass,dog,frog,函数找不到glass。为什么?我不应该有test={nil,nil,1}吗?如果是这样的话,那么条件会指责有什么。因为test={1,nil,nil},但是nil相当于删除元素,也就是说,它好像从表中删除了。好的,但是如果我在这个字符串中有stg=可以找到单词glass,dog,frog,那么函数就找不到glass。为什么?我不应该有test={nil,nil,1}吗?如果是这样,那么条件将指责存在某些内容。如果string.find获得匹配,它将返回2个值。这可能会导致test.n比应该的多1。可能在最后一个调用的周围加上括号,将其截断为一个值。如果string.find获得匹配,它将返回2个值。这可能会导致test.n比应该的多1。也许在最后一次调用的周围加上括号,将其截断为一个值。