2014-01-16 4 views
3

Я пытаюсь получить строку с несколькими номерами для одного Int как это:Преобразование вычисления строки в целое в Lua

x="5+5" --amount of numbers is not constant 
y=tonumber(x) 
print(y) 

Результатом этого является nil в то время как она должна быть 10 (целое) , Единственный способ, которым я мог это решить, - сначала найти все "+" и "-" с string.find(), а затем разрезать его на все необходимые части, а оттуда только tonumber(). Для такой простой проблемы было бы глупо кодировать не менее ста строк кода.

ответ

3

tonumber может использоваться только для строки, которая является действительным числом, а не арифметическим выражением.

Вы можете загрузить строку и запустить его:

x = "5 + 5" 
func = assert(load("return " .. x)) 
y = func() 
print(y) 

В Lua 5.1, используйте loadstring вместо load.

+3

Убедитесь, что вы доверяете источнику; это можно использовать для запуска произвольного кода! –

+0

'setfenv (func, {})' должен помочь свести к минимуму риск запуска вредоносного кода, не так ли? Есть ли способ, которым код может все еще причинить вред, даже без доступа к каким-либо функциям? –

+2

Лучшей средой для оценки выражения будет библиотека 'math', так что пользователь может написать' cos (x) 'вместо' math.cos (x) '. – lhf

Смежные вопросы