String 在Lua中将计算字符串转换为int

String 在Lua中将计算字符串转换为int,string,lua,numbers,String,Lua,Numbers,我正在尝试将一个包含多个数字的字符串转换为一个整数 像这样: x="5+5" --amount of numbers is not constant y=tonumber(x) print(y) 结果是nil,而它应该是10(int)。我能解决这个问题的唯一方法是首先用字符串搜索所有“+”和“-”。find(),然后将其剪切到所有必要的部分,然后从那里只搜索tonumber()。为这样一个简单的问题编写至少一百行代码感觉很愚蠢 tonumber只能用于实数字符串,不能用于算术表达式 您可以

我正在尝试将一个包含多个数字的字符串转换为一个整数 像这样:

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

结果是
nil
,而它应该是
10
(int)。我能解决这个问题的唯一方法是首先用
字符串搜索所有
“+”
“-”
。find()
,然后将其剪切到所有必要的部分,然后从那里只搜索
tonumber()
。为这样一个简单的问题编写至少一百行代码感觉很愚蠢

tonumber
只能用于实数字符串,不能用于算术表达式

您可以加载字符串并运行它:

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

在Lua5.1中,使用
loadstring
而不是
load

确保您信任源代码;这可以用来运行任意代码
setfenv(func,{})
应该有助于最小化运行恶意代码的风险,不是吗?有没有一种方法可以使代码即使在没有访问任何函数的情况下仍然会造成伤害?更好的表达式计算环境是
math
库,这样用户就可以编写
cos(x)
而不是
math.cos(x)