使用Lua字符串匹配的计算器

时间:2014-03-19 21:56:49

标签: string lua lua-patterns

我最近在使用字符串操作来尝试制作一个只接受一个字符串并返回答案的计算器。我知道我可以简单地使用loadstring来做到这一点,但我想了解更多有关字符串操作的信息。这就是我到目前为止:有什么办法可以让它更有效率吗?

function calculate(exp)
    local x, op, y =
    string.match(exp, "^%d"),
    string.match(exp, " %D"),
    string.match(exp, " %d$")
    x, y = tonumber(x), tonumber(y)       
    op = op:sub(string.len(op))
    if (op == "+") then
        return x + y
    elseif (op == "-") then
        return x - y
    elseif (op == "*") then
        return x * y
    elseif (op == "/") then
        return x / y
    else
        return 0
    end
end

print(calculate("5 + 5"))

1 个答案:

答案 0 :(得分:4)

您可以在匹配模式中使用captures来减少对string.match()的调用次数。

local x, op, y = string.match(exp, "^(%d) (%D) (%d)$")

这也消除了修剪op结果的需要。

不需要为tonumber()x调用转化y。当与数字运算符一起使用时,它们将自动转换。