缺少值时函数不会 return 消息
Function doesn't return message when value is missing
我正在尝试检查字符串中是否有某些单词。到目前为止,我创建了一个函数,该函数存储在 table 测试字符串中是否存在单词,如果字符串中存在该单词,则该函数打印一条消息,否则打印其他消息。
这是 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
字符串有 none 的匹配词,函数 returns 什么都没有。甚至没有消息 There's nothing
.
如何使函数检查字符串中是否存在单词并正确打印消息?
使用 table.pack
并按索引迭代。
--[[
-- For Lua 5.1 and LuaJIT
function table.pack(...)
return { n = select("#", ...), ... }
end
--]]
stg = "In this string the words sky, dog, frog can be found"
function highlight(str)
local test = table.pack((str:find("sky")),(str:find("car")),(str:find("glass")))
for n = 1, test.n do
local v = test[n]
if v ~= nil then
print("There's something")
else
print("There's nothing")
end
end
end
highlight(stg)
ipairs
迭代器在找到 nil
值时停止,但 string.find
有时会 return nil
。这意味着在你的循环中,v
永远不会是 nil
.
一种解决方案是仅将搜索字符串放入 table 并在循环内调用 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)
我正在尝试检查字符串中是否有某些单词。到目前为止,我创建了一个函数,该函数存储在 table 测试字符串中是否存在单词,如果字符串中存在该单词,则该函数打印一条消息,否则打印其他消息。
这是 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
字符串有 none 的匹配词,函数 returns 什么都没有。甚至没有消息 There's nothing
.
如何使函数检查字符串中是否存在单词并正确打印消息?
使用 table.pack
并按索引迭代。
--[[
-- For Lua 5.1 and LuaJIT
function table.pack(...)
return { n = select("#", ...), ... }
end
--]]
stg = "In this string the words sky, dog, frog can be found"
function highlight(str)
local test = table.pack((str:find("sky")),(str:find("car")),(str:find("glass")))
for n = 1, test.n do
local v = test[n]
if v ~= nil then
print("There's something")
else
print("There's nothing")
end
end
end
highlight(stg)
ipairs
迭代器在找到 nil
值时停止,但 string.find
有时会 return nil
。这意味着在你的循环中,v
永远不会是 nil
.
一种解决方案是仅将搜索字符串放入 table 并在循环内调用 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)