#lua #concatenation #null
#lua #конкатенация #null
Вопрос:
У меня есть следующая функция в Lua:
function iffunc(k,str,str1)
if k ~= 0 then
return str .. k .. (str1 or "")
end
end
Эта функция позволяет мне проверить, заполнено ли значение k или нет. На самом деле я использую это, чтобы определить, хочу ли я отображать что-то, имеющее нулевое значение. Моя проблема заключается в следующем: я пытаюсь объединить строку iffunc (), но поскольку некоторые значения равны 0, она возвращает ошибку при попытке объединить нулевое значение. Например:
levellbon = iffunc(levellrep["BonusStr"],"@wStr@r{@x111","@r}") .. iffunc(levellrep["BonusInt"],"@wInt@r{@x111","@r}") .. iffunc(levellrep["BonusWis"],"@wWis@r{@x111","@r}")
Если какое-либо из значений таблицы равно 0, это вернет ошибку. Я мог бы легко поместить ‘return 0’ в сам iffunc; однако мне также не нужна строка из 000. Итак, как я могу работать с этим, где независимо от того, какие значения равны нулю, я не получу эту ошибку? В конечном счете, я собираюсь выполнить iffunc для переменной levellbon, чтобы посмотреть, заполнена она или нет, но с этой частью я разобрался. Мне просто нужно преодолеть это небольшое препятствие прямо сейчас. Спасибо!
Комментарии:
1. Вы не можете просто вернуть пустую строку (
""
),k
если она равна 0?2. О! Я не могу поверить, что это было так просто. Я виню в этом время кодирования и недостаток сна. Спасибо! Теперь просто нужно немного изменить функцию.
3. Просто чтобы вы знали в будущем, вы можете сделать это:
something and A or B
. Еслиsomething
значение равно true, оно передаст значение A, в противном случае оно передаст значение B. Пример:k ~= 0 and str..k..(str1 or "") or ""
4. @JoachimPileborg Вам определенно следует добавить это в качестве правильного ответа.
5. Выбранный ответ работает нормально, однако это также, похоже, работает нормально для меня: print(«это строка» .. tostring(nilObject)) В строке выше выводятся выходные данные: это строка nil
Ответ №1:
Я бы сделал это:
function iffunc(k,str,str1)
if k == 0 then return "" end
return str .. k .. (str1 or "")
end
Комментарии:
1. Просто замечание, если у вас действительно есть причина объединить нулевое значение, вы можете сделать:
'hi' .. string.char(0x00) .. 'there'
.
Ответ №2:
Вы должны добавить else
оператор в функцию, где вы возвращаете пустую строку ( ""
).