在Lua中将计算字符串转换为整数

3
我正在尝试将包含多个数字的字符串转换为单个整数,就像这样:
x="5+5"  --amount of numbers is not constant
y=tonumber(x)
print(y) 

这样的结果是nil,但实际上应该是10(整数)。我解决这个问题的唯一方法是先使用string.find()查找所有的"+""-",然后将其切割成所有必要的部分,然后再使用tonumber()。为了解决这样一个简单的问题而编写至少一百行代码感觉很愚蠢。

1个回答

3

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

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

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

在Lua 5.1中,请使用loadstring代替load

3
请确保信任信息来源;否则可能会被用于运行任意代码! - Colonel Thirty Two
setfenv(func, {})应该有助于最小化运行恶意代码的风险,不是吗?即使没有访问任何函数,代码仍然可能会造成伤害吗? - Henrik Ilgen
2
更好的表达式求值环境应该是math库,这样用户就可以写cos(x)而不是math.cos(x) - lhf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接