Неверный аргумент №3 для "форматирования" (ожидаемая строка, полученная логическая переменная)?

Редактирование файла lua для скина дождемера "Вам нужен пиджак" с ошибкой в ​​названии этого кода


--[[ Given the current temperature, return the appropriate
  string for the main string meter ]]
local function getMainString( temp )
local negation = (temp > Settings.Ss_Limit) and " don't" or ""
local summerwear = (temp < Settings.Ss_Limit) and (temp > Settings.Vest_Limit) and "shirt and shorts"
local innerwear = (temp < Settings.Vest_Limit) and (temp > Settings.Jacket_Limit) and "vest"
local southerwear = (temp < Settings.Jacket_Limit) and (temp > Settings.Coat_Limit) and "jacket"
local outerwear = (temp < Settings.Coat_Limit) and "coat"
return string.format("You%s need a %s", negation, (summerwear or innerwear or southerwear or outerwear))
end

Предполагается дать правильную одежду в зависимости от температуры. Я пытался с разными местами для изменения температуры, и единственный раз, когда я получаю ошибку, это когда температура превышает Ss_limit. У меня нет большого опыта программирования, спасибо заранее

2 ответа

Когда temp больше чем Settings.Ss_Limitили равно любому из Settings.*_Limit, все summerwear, innerwear, southerwearа также coatwear будет false, Это делают (summerwear or innerwear or southerwear or outerwear) быть false (логическое значение) вместо строки, которая вызывает ошибку.

Возможное исправление:

--[[ Given the current temperature, return the appropriate
  string for the main string meter ]]
local function getMainString( temp )
local negation = (temp > Settings.Ss_Limit) and " don't" or ""
--[[ this is used to produce "You don't need a cloth" when
    temp is greater than Ss_Limit. Adjust the string based on your own need.
]]
local clothwear = (temp > Settings.Ss_Limit) and "cloth"
--[[ changed < to <=, the following is the same, as not to get an error
  when temp equals any of the _Limit .
]]
local summerwear = (temp <= Settings.Ss_Limit) and (temp > Settings.Vest_Limit) and "shirt and shorts"
local innerwear = (temp <= Settings.Vest_Limit) and (temp > Settings.Jacket_Limit) and "vest"
local southerwear = (temp <= Settings.Jacket_Limit) and (temp > Settings.Coat_Limit) and "jacket"
local outerwear = (temp <= Settings.Coat_Limit) and "coat"
--[[ added clothwear here, to produce proper output 
  when temp is greater than Ss_Limit
]]
return string.format("You%s need a %s", negation, (clothwear or summerwear or innerwear or southerwear or outerwear))
end

Вам нужно вручную вычислить логический тип в строку.

Попробуй это,

string.format("You%s need a %s", negation, tostring(clothwear or summerwear or innerwear or southerwear or outerwear))
Другие вопросы по тегам