某些情况下,当string类型变量和number类型变量在一起参与运算时,什么情况下会自动转换类型?
1.字符串和数字进行连接操作时(运算符..)会将number变量转为字符串
eg:print("w"..1) 输出w1
2.当字符串和数字进行算术运算时,会自动将字符串转换为数字
eg:print("3" + 2) 输出5
3.当字符串用于需要接收数字类型参数的函数时,会自动将字符串转换为数字
eg:print(math.sin("0")) 输出0
OK看到这里,千万别得出一种Lua中number和string类型一起运算时一定会转换的结论(我以前就得出这样的结论)
相反,当number和string类型用在关系运算符(==,~=,<,>,<=,>=)时,一定不会转换
eg:print("1" < 1) 报错
eg:print("1" == 1) 输出false
如果你用<运算符还好,看到报错后的提示知道错误,如果你用==那就呵呵了,永远是false,尤其是如果你有段这样的话,很难发现错误的位置
local a = "5"
local b = 9
if a < b then
print("in if")
end
以下是踩坑现场还原:
local channelID = getChannelID()
local elemment = myTable[1]
for i,v in pairs(myTable) do
if channelID == v.Fid then
element = v
break
end
end
希望经过一个for循环得到正确的element的值,但是一直得不到,为什么?因为channelID的类型为string,channelID == v.Fid 的返回值一直为false,走不进来,非常隐蔽的错误,当时给我恶心的不行
结论:当用关系运算符时,需确保两边的参数为number类型,非number类型用tonumber()函数转换为number类型.