【发布时间】:2014-04-08 08:04:52
【问题描述】:
Lua 一般是strongly-typed 语言,几乎不提供数据类型之间的隐式转换。
但是,数字和字符串确实会得到automatically coerced in a few cases:
Lua 在运行时提供字符串和数字值之间的自动转换。任何应用于字符串的算术运算都会尝试将此字符串转换为数字,遵循 Lua 词法分析器的规则。 (字符串可能有前导和尾随空格和一个符号。)相反,只要在需要字符串的地方使用数字,该数字就会以合理的格式转换为字符串
因此:
local x,y,z = "3","8","11"
print(x+y,z) --> 11 11
print(x+y==z) --> false
print(x>z) --> true
我不想要这个。如何重新编译 Lua 解释器以消除所有自动转换?
我希望拥有:
print(x+y) --> error: attempt to perform arithmetic on a string value
print(x>1) --> error: attempt to compare number with string
print(x..1) --> error: attempt to concatenate a number value
【问题讨论】:
-
可行,但不是开箱即用。您必须编辑 Lua 的内部结构。从lua.org/source/5.2/lvm.c.html#luaV_tonumber开始。
-
您可能也想“修复”这样的情况:
print("one="..1) -
创建自己的 lua 方言,巧妙地(并且默默地!)不同于主流真的值得吗?
-
@vonbrand 好吧,我们已经使用 32 位数字而不是 64 位进行编译,这有其自身微妙的含义(例如,
os.time()不会每秒增加)。不过,这是由编译时标志支持的。 -
您能否明确说明您想要的输出(对于您各自的示例)?
标签: c lua strong-typing