Lua: Есть ли способ объединить «нулевые» значения?

#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 оператор в функцию, где вы возвращаете пустую строку ( "" ).