local str = "数学90分,语文85分,英语88分"
local sum = 0
for score in string.gmatch(str, "%d+") do
sum = sum + tonumber(score)
end
print("总分:", sum)
这种是什么循环? 与for i=1,10 do end 有区别吗?
你这里使用的是 **`string.gmatch` 迭代器循环**,而 `for i=1,10 do end` 是 **数字范围循环**。
**主要区别:**
1. **`string.gmatch` 循环(迭代器循环)**
```lua
for score in string.gmatch(str, "%d+") do
sum = sum + tonumber(score)
end
```
- 遍历字符串中所有匹配模式 `%d+`(一个或多个数字)的部分
- 每次循环 `score` 变量会依次变成 "90"、"85"、"88"
- 适合处理文本中的模式匹配
2. **数字范围循环**
```lua
for i = 1, 10 do
-- 循环10次,i 从1到10
end
```
- 固定次数循环,i 按1递增
- 适合需要明确次数的场景
**实际对比:**
```lua
-- 迭代器循环:从字符串提取内容
local str = "数学90分,语文85分,英语88分"
for score in string.gmatch(str, "%d+") do
SL:print("找到分数:", score) -- 输出:90、85、88
end
-- 数字循环:固定次数
for i = 1, 3 do
SL:print("第", i, "次循环") -- 输出:第1次、第2次、第3次
end
```
简单说:一个是"找东西"的循环,一个是"数数"的循环。理解了吗?