Lua中对字符串类型执行算术操作

我想问一下Lua中关于数据类型的问题。 我从串行链接中获取了一个命令和值的消息(命令:值),就像这样:

tmp_string = "BRAKE:1"

然后我将这个字符串解析成两个不同的函数中的命令和值(一个用于命令,另一个用于值)。这是解析值的函数

function parser(value)
    index = string.find(value, ":")
    result = value.sub(value, index+1)
    return result
end

我想知道result是什么数据类型?如果我使用字符串匹配,它可以工作。

...if string.match(state, "1") then...

但是当我像这样进行数字运算时,它也可以工作

x = (state*65536)/3.2808)

我认为结果是字符串,但我不明白为什么它还可以使用数字运算。非常感谢您的帮助。

点赞
用户2505965
用户2505965

Lua 5.3 参考手册, §3.4.1 - 算术运算符

除了幂运算和浮点数除法外,算术运算符的操作方式如下:如果两个操作数都是整型,那么该操作将在整数上执行并且结果是整数。否则,如果两个操作数都是可以转换为浮点数的数字或字符串(参见§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并检查结果字符串。

2016-09-02 15:13:25