当从字符串中取出两个数字时出现错误。

我只是在玩弄 Lua,尝试制作一个使用字符串操作的计算器。基本上,我从字符串中取出两个数字,然后对它们执行某些操作(+ - * /)。我可以成功地从 x 中取出一个数字,但从 y 中取出一个数字总是返回 nil。有人能帮帮我吗?

local x = "5 * 75"

function calculate(s)
    local x, y =
    tonumber(s:sub(1, string.find(s," ")-1)),
    tonumber(s:sub(string.find(s," ")+3), string.len(s))
    return x * y
end

print(calculate(x))
点赞
用户3017112
用户3017112

你的错误很简单,是将 string.len 发送到了 tonumber 而不是 sub。

local x, y =
tonumber(s:sub(1, string.find(s," ")-1)),
tonumber(s:sub(string.find(s," ")+3, string.len(s)))

实际上你不需要使用 string.len,因为如果没有给出 sub 的第二个参数,默认值为字符串的结尾。

编辑: 其实你可以使用 string.match 更简短地实现你想要的功能。

local x,y = string.match(s,"(%d+).-(%d+)")

Match 会尝试将给定的模式与字符串匹配,并返回捕获的值, 在这个例子中是数字。这个模式是 “一个或者多个数字,之后是任何字符的最小匹配,再之后是一个或者多个数字”。%d 表示一个数字,+ 表示多个。. 表示任何字符,- 表示最小匹配。括号内的值是被捕获的,也就是会被返回。

2014-03-19 20:30:46