Компиляция 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
1 8

1 ответ:

Прославленный LHF прокомментировал выше, что это невозможно из коробки и требует редактирования внутренностей Lua, начиная с http://www.lua.org/source/5.2/lvm.c.html#luaV_tonumber

Помечаем это как ответ, чтобы закрыть этот вопрос. Если кто-то позже решит дать ответ с подробными подробностями о том, что нужно сделать, я с радостью переключу знак согласия на этот ответ.