控制流
if/while/for/switch/match 控制流语句
Aria 提供了 if、while、for、switch、match 等控制流语句,以及 break、next、return 跳转语句。
if / elif / else
条件分支语句,条件需要用括号包裹:
elif 可以有多个,else 可选但只存在一个且位于末尾:
while 循环
当条件为真时重复执行循环体:
⚠️
while内的break不是"跳出这个 while"——它会向外泄漏: 有外层for时直接跳出那个for;没有时整个脚本立即终止(返回none)。 这是为兼容 Shimmer 历史行为保留的语义,详见下文 break / next / return。 需要"提前退出 while"时请用循环条件表达:
for-in 循环
遍历列表:
遍历 Range(0..10 是 Range(0, 10) 的字面量简写,双端闭区间):
Range(a, b)在a > b且未显式给步长时是空区间(一次都不执行,不自动倒序); 倒序需显式步长:Range(10, 0, -1)。
解构遍历 Map 的键值对:
几个值得注意的细节:
- 含
none元素的列表可以完整遍历(不会在none处提前结束); - Map 解构时变量多于可取值时,多出的变量为
none(不报错); - 循环变量在循环结束后仍然可见,保留最后一次迭代的值:
for(C 风格循环)
传统的三段式循环,需要括号包裹:
三个部分分别是初始化、条件、更新:
初始化段只声明一个循环变量;需要额外变量时在 for 之前声明。
注意初始化段应使用裸名(i = 0)——若写 var.i = 0,条件里的裸名 i
读到的是另一个变量(命名空间隔离,见变量系统)。
switch
switch按顺序对每个 case 求条件并与"当前比对值"比较:
- 匹配的
case执行其代码块,且比对值被替换为该块的结果值,随后继续比对后续case; - 所有
case比对完后else总是执行(若存在); - 已执行的块内出现
break时,switch立即结束并跳过else; - 不存在 C 式的无条件穿透。
注意:不写 break 时匹配块执行后 else 也会执行;且后续 case 的条件是与
匹配块的结果值比较(通常不再匹配)。
match(不穿透)
match 与 switch 类似,但匹配成功后自动跳出,不会穿透:
不需要写 break,每个 case 执行完毕后自动结束。
break / next / return
三种跳转语句:
break — 跳出当前 for 循环或 switch:
注意:while 内的 break 会泄漏——
跳出自身后继续向外传播,被最近的外层 for/switch 消耗;没有消耗者时整个脚本
终止(返回 none,while 之后的语句不再执行)。同理,while 末轮以 next
结束且随后条件为假退出时,残留的 next 也会向外泄漏。循环外的 break/next
同样使脚本终止。
next — 跳过本次迭代,进入下一次循环(等价于其他语言的 continue):
return — 从函数中返回值:
不带表达式的 return 返回 none:
