Question

Lua is generally a strongly-typed language, providing almost no implicit conversion between data types.

However, numbers and strings do get automatically coerced in a few cases:

Lua provides automatic conversion between string and number values at run time. Any arithmetic operation applied to a string tries to convert this string to a number, following the rules of the Lua lexer. (The string may have leading and trailing spaces and a sign.) Conversely, whenever a number is used where a string is expected, the number is converted to a string, in a reasonable format

Thus:

local x,y,z = "3","8","11"
print(x+y,z)  --> 11   11
print(x+y==z) --> false
print(x>z)    --> true

I do not want this. How can I recompile the Lua interpreter to remove all automatic conversion?

I would prefer to have:

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
Was it helpful?

Solution

The illustrious LHF has commented above that this is not possible out of the box, and requires editing the innards of Lua, starting with http://www.lua.org/source/5.2/lvm.c.html#luaV_tonumber

Marking this as the answer in order to close this question. If anyone later chooses to provide an answer with in-depth details on what needs to be done, I will gladly switch the acceptance mark to that answer.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top