Function 缺少值时,函数不返回消息

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

我正在检查字符串中是否有某些单词。到目前为止,我创建了一个函数,如果单词出现在字符串中,则该函数将存储在表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("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。也许在最后一次调用的周围加上括号,将其截断为一个值。