是否可以将 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