我想问一下Lua中的数据类型。 我从串行链接得到一些消息(命令:值),如下所示:
tmp_string = "BRAKE:1"
然后我将这个字符串解析为两个不同函数中的命令和值(一个用于命令,另一个用于值)。这是解析值
的函数function parser(value)
index = string.find(value, ":")
result = value.sub(value, index+1)
return result
end
我想现在的结果是什么类型的数据?如果我使用字符串匹配,它就可以工作。
...if string.match(state, "1") then...
然而,当我做这样的事情时它也有效
x = (state*65536)/3.2808)
我认为结果是字符串,但我不明白为什么它也适用于数字运算。先感谢您。
答案 0 :(得分:4)
Arithmetic Operators
除了取幂和浮点除法之外,算术运算符的工作方式如下:如果两个操作数都是整数,则操作在整数上执行,结果为整数。否则,如果两个操作数都是可以转换为数字的数字或字符串(参见§3.4.3),然后将它们转换为浮点数,则操作将在通常的浮点运算规则(通常是IEEE 754标准),结果是浮点数。
重点是我的。
在处理操作时,Lua将尝试将字符串操作数转换为浮点数,如果它可以工作 - 它可以工作。如果失败,则会出错。
>| '55' / 2
<| 27.5
>| 'foo' / 2
<| error: [string "return 'foo' / 2"]:1: attempt to perform arithmetic on a string value
如果您想明确这个(并且安全)请使用tonumber
,并处理nil
- 案例。
如果您需要知道Lua中值的类型,可以将变量传递给type
并检查生成的字符串。