Вот почему ваш код не работает.Ваша первая итерация цикла использует Mrs
и проверяет, совпадает ли она с Miss
, и это не так, меняет заголовок на XX
и, следовательно, никакие последующие проверки никогда не могут совпадать.
Вы не можете изменить заголовок, пока не проверили все возможные значения.Настроив код для использования переменной matchFound
, чтобы определить, требуется ли изменение, вы можете решить эту проблему:
local matchFound = false
for i = 1, 5 do
if string.match(title, setTitles[i]) ~= nil then
matchFound = true
break
end
end
if matchFound == false then
title = "XX"
end
print(title)
Кроме того, ваш код может давать ложные совпадения для Mr
, а не Mrs
thisпотому что Mr
будет соответствовать внутри Mrs
или любой строке, которая начинается с Mr
.Чтобы изменить это, вы можете настроить свой вызов string.match следующим образом:
string.match(title, "^".. setTitles[i] .. "$")
Это заставит string.match
гарантировать, что первый и последний символы шаблона также являются первым и последним символами переданной строки
В качестве рекомендации вместо использования string.match
сделайте свой setTitles
правильный набор, например:
local setTitles = {["Miss"] = true, ["Mr"] = true, ["Mrs"] = true, ["Dr"] = true, ["Ms"] = true}
Тогда ваш чек станет:
title = setTitles[title] and title or "XX"
Ресурс Lua в наборах:
https://www.lua.org/pil/11.5.html
http://lua -users.org / wiki / SetOperations