是否可以将 Lua 中的用户输入作为数学运算读取?
Is it possible to read user input in Lua as a math operation?
我正在尝试编写以函数形式接受输入的内容,例如“f(x) = 2*x + 5”,并将其计算为正规方程。
我目前拥有的是:
print("give any function") --vague as placeholder
x=50
str=string.gsub(io.read(), "x", tostring(x))
print(str*1)
当你在输入中有 x 变量时,它工作正常,将它替换为之前设置的 x 变量。发生的情况是,当您将诸如“1+1”之类的内容放入其中时,它不接受。
有没有办法让诸如“1+1”之类的输入可以计算为 2,而不仅仅是它给出的字符串?
我在这里主要问的是:
格式为“number operator number”的任何用户输入都只能读取为字符串,而不是可计算的方程式。任何解决方法?
您可以使用一些更详细的 gsub,然后将函数加载为 lua 代码。
由于 1 + 1
的格式并不是真正的“函数”格式,我们需要为函数只是一个操作的情况添加一些额外的处理
function evaluateFunction(funcStr, x)
funcStr = "return " .. funcStr
funcStr, replaced = funcStr:gsub("f%(", "function(")
funcStr = funcStr:gsub("=", "return")
if replaced ~= 0 then
funcStr = funcStr .. " end"
end
print(funcStr)
local func = load(funcStr)()
if type(func) == "function" then
print(func(x))
else
print(func)
end
end
evaluateFunction("f(x) = 2*x + 5", 50)
evaluateFunction("f() = 2*5")
evaluateFunction("1 + 1")
输出:
return function(x) return 2*x + 5 end
105
return function() return 2*5 end
10
return 1 + 1
2
我正在尝试编写以函数形式接受输入的内容,例如“f(x) = 2*x + 5”,并将其计算为正规方程。
我目前拥有的是:
print("give any function") --vague as placeholder
x=50
str=string.gsub(io.read(), "x", tostring(x))
print(str*1)
当你在输入中有 x 变量时,它工作正常,将它替换为之前设置的 x 变量。发生的情况是,当您将诸如“1+1”之类的内容放入其中时,它不接受。
有没有办法让诸如“1+1”之类的输入可以计算为 2,而不仅仅是它给出的字符串?
我在这里主要问的是: 格式为“number operator number”的任何用户输入都只能读取为字符串,而不是可计算的方程式。任何解决方法?
您可以使用一些更详细的 gsub,然后将函数加载为 lua 代码。
由于 1 + 1
的格式并不是真正的“函数”格式,我们需要为函数只是一个操作的情况添加一些额外的处理
function evaluateFunction(funcStr, x)
funcStr = "return " .. funcStr
funcStr, replaced = funcStr:gsub("f%(", "function(")
funcStr = funcStr:gsub("=", "return")
if replaced ~= 0 then
funcStr = funcStr .. " end"
end
print(funcStr)
local func = load(funcStr)()
if type(func) == "function" then
print(func(x))
else
print(func)
end
end
evaluateFunction("f(x) = 2*x + 5", 50)
evaluateFunction("f() = 2*5")
evaluateFunction("1 + 1")
输出:
return function(x) return 2*x + 5 end
105
return function() return 2*5 end
10
return 1 + 1
2