编译Lua而不在字符串和数字之间自动转换

时间:2014-03-05 23:36:00

标签: c lua strong-typing

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

1 个答案:

答案 0 :(得分:2)

杰出的LHF已在上面评论说,这不可能开箱即用,需要编辑Lua的内部,从http://www.lua.org/source/5.2/lvm.c.html#luaV_tonumber开始

将此标记为答案以便结束此问题。如果有人后来选择提供有关需要做什么的深入细节的答案,我很乐意将接受标记转换为答案。