3

私は最近、文字列操作をいじって、文字列を 1 つだけ取り、答えを返す電卓を作成しようとしました。これを行うには単純に 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"))
4

1 に答える 1

4

マッチング パターンでキャプチャを使用して、string.match() の呼び出し回数を減らすことができます。

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

これにより、結果をトリミングする必要もなくなりますop

andに対して変換tonumber()を呼び出す必要はありません。これらは、数値演算子と一緒に使用すると自動的に変換されます。xy

于 2014-03-19T23:01:42.440 に答える