编译Lua时禁止自动转换字符串和数字之间的转化。

Lua通常是一种具有强类型的语言,几乎没有数据类型之间的隐式转换。

但是,在某些情况下,数字和字符串会自动强制转换(在这里)

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
点赞
用户405017
用户405017

著名的LHF在上方评论说这不可能实现,需要编辑Lua的内核,从http://www.lua.org/source/5.2/lvm.c.html#luaV_tonumber开始。

我将此标记为答案以关闭此问题。如果后来有人选择提供详细说明所需的操作,我将乐意将接受标记切换到该答案。

2014-04-22 15:36:57