格式化函数的第3个参数 (需要字符串类型, 得到了布尔类型)?

编辑 "Do you need a jacket" 雨滴皮肤的lua文件 在此代码中收到了标题中的错误


--[[ 根据当前温度, 返回主字符串表 ]]
local function getMainString( temp )
local negation = (temp > Settings.Ss_Limit) and "不必" or ""
local summerwear = (temp < Settings.Ss_Limit) and (temp > Settings.Vest_Limit) and "衬衫和短裤"
local innerwear = (temp < Settings.Vest_Limit) and (temp > Settings.Jacket_Limit) and "背心"
local southerwear = (temp < Settings.Jacket_Limit) and (temp > Settings.Coat_Limit) and "夹克"
local outerwear = (temp < Settings.Coat_Limit) and "外套"
return string.format("你%s需要%s", negation, (summerwear or innerwear or southerwear or outerwear))
end

应该根据温度给出正确的服装。我尝试了在不同的温度变化位置上进行尝试,并且我唯一收到错误的时候是当温度超过Ss_limit时。我没有很多编程经验,所以提前感谢你的帮助

点赞
用户1058916
用户1058916

temp 大于 Settings.Ss_Limit,或者等于任何一个 Settings.*_Limit 时,所有的 summerwearinnerwearsoutherwearcoatwear 都会变成 false。这会导致 (summerwear or innerwear or southerwear or outerwear) 变成布尔值 false 而非字符串,从而导致错误。

可能的修复方法:

--[[ 根据当前温度,返回适当的主字符串 ]]
local function getMainString( temp )
local negation = (temp > Settings.Ss_Limit) and " 不需要" or ""
--[[ 当 temp 大于 Ss_Limit 时,此处将产生 "You don't need a cloth"。
    根据需要调整该字符串。
]]
local clothwear = (temp > Settings.Ss_Limit) and "cloth"
--[[ 将 < 改为 <= ,下面的语句保持不变,
  防止在 temp 等于任何 _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"
--[[ 在此处添加 clothwear,以便在 temp 大于 Ss_Limit 时产生正确的输出。
]]
return string.format("你%s需要一件%s", negation, (clothwear or summerwear or innerwear or southerwear or outerwear))
end
2017-09-06 00:25:29
用户3882507
用户3882507

你需要手动将布尔类型转换为字符串。

尝试这样做:

string.format("You%s need a %s", negation, tostring(clothwear or summerwear or innerwear or southerwear or outerwear))
2018-07-02 07:19:01