Допущения
Глядя на ваш ответ, я предположу, что
myComputer.referenceLookup
определено где-то еще и работает как задумано (а не является частью этого вопроса) NULL
также определено где-то еще и представляет собой некое nil-значение
Ответ
Строка
if myComputer.referenceLookup("/Address/ .. (x) .. /text") != NULL or "None" or "" then
не работаетпотому что оператор or
не работает таким образом.
Как Lua интерпретирует его как
if (myComputer.referenceLookup("/Address/ .. (x) .. /text") != NULL) or "None" or ""
, а так как "None" является строковым значением и, таким образом, считается истинным, то еслиусловие всегда будет иметь значение true, поэтому оно всегда будет возвращать первое местоположение.Также в Lua нет оператора !=
;вместо этого ~=
.
Что касается решения, вам, по сути, нужно три сравнения, например:
if myComputer.referenceLookup("/Address/" .. x .. "/text") ~= NULL
and myComputer.referenceLookup("/Address/" .. x .. "/text") ~= "None"
and myComputer.referenceLookup("/Address/" .. x .. "/text") ~= "" then
Очевидно, что трижды вызвать функцию - плохая идея, как из-за производительности, так ипоскольку он может иметь побочные эффекты, поэтому лучше сначала сохранить его в переменную, например так:
local result = myComputer.referenceLookup("/Address/" .. (x) .. "/text")
if result ~= NULL and result ~= "None" and result ~= "" then
return result
end
Extra
Если вы хотите упростить расширение вашей программы, вы также можетеиспользуйте string.format
для построения местоположений из шаблонов.Допустим, у вас есть таблица, содержащая все ваши местоположения, например:
local locations = {
"/Address/%s/text";
"/Address/1/%s/text";
}
Затем вы можете перебирать записи с помощью ipairs
и строить каждое местоположение с помощью string.format
:
for index, template in ipairs(locations) do
local result = myComputer.referenceLookup(template:format(x))
if result ~= NULL and result ~= "None" and result ~= "" then
return result
end
end
Обратите внимание, что вы можете написать string.format(template, x)
как template:format(x)
, если шаблон является строкой.( дальнейшее чтение )