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

标签 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"))

最佳答案

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

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

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

不需要为xy 调用转换tonumber()。当与数字运算符一起使用时,这些将自动转换。

关于string - 使用Lua字符串匹配的计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22519001/

相关文章:

c++ - 如何在 C++ 中使用 Unicode?

python - 在python中将字符串/字符转换为整数

nginx - Lua在nginx中的包路径

lua - Lua语法错误… “=”附近可能需要 “end”

Lua:理解表数组部分和哈希部分

Lua:在 string.gsub 中转义文字 % 并捕获 %2

lua - Lua中的多线模式是什么?

php - 在 SQL 查询中插入非常长的字符串 - 错误

Javascript,字符串 : Getting a Javascript var as a string

string - Lua模式查询