For_循环
反复执行其内容。它有三种形式:仅条件形式、三段式条件形式、范围形式。(<<for>> 是「复读机」,让它念几遍它就念几遍——不过记得用 <<break>> 按下暂停键,免得它念到天荒地老。)
语法
SugarCube
<<for [conditional]>> … <</for>>
<<for [init] ; [conditional] ; [post]>> … <</for>>
<<for [[keyVariable ,] valueVariable] range collection>> … <</for>>参见:
<<break>>和<<continue>>。
历史
v2.0.0:引入。v2.20.0:新增范围形式。v2.37.0:新增整数范围,并让范围值变量变为可选。
说明
- 循环变量最适合使用临时变量——例如
_i。 - 为了让换行符出现在你想要(或不想要)的位置,可能需要格外小心。
条件形式
只要给定的条件表达式求值为 true,就执行其内容。若未给出条件表达式,则等同于指定 true。
注意:条件形式的循环次数默认不是无限制的,但是可配置的。更多信息请参阅
Config.macros.maxLoopIterations。
范围形式
遍历给定集合的所有可枚举条目。每次迭代,它都会把集合中相应条目的键/值对赋给迭代变量,然后执行其内容。有效的集合类型包括:数组、泛型对象、整数、映射、集合和字符串。
参数
有关表达式中可执行操作的更多信息,请参阅「变量」、「表达式」和「运算符」。
条件形式
init:(可选)一个有效表达式,在循环初始化时求值一次。通常用于初始化计数器变量。conditional:(可选)一个有效条件表达式,在每次循环迭代前求值。只要表达式求值为true,循环就会执行。post:(可选)一个有效表达式,在每次循环迭代后求值。通常用于更新计数器变量。
范围形式
keyVariable:(可选)接收迭代键的故事变量或临时变量。若指定,则必须同时指定值变量。valueVariable:(可选)接收迭代值的故事变量或临时变量。range:关键字,表示循环使用范围形式语法。collection:一个表达式,求值结果必须是有效的集合类型(见下表),在循环初始化时求值一次。
| 集合类型 | 迭代:键,值 |
|---|---|
| 数组、整数、集合 | 成员:索引,值 |
| 泛型对象 | 属性:名称,值 |
| 映射 | 条目:键,值 |
| 字符串 | 码点:起始索引,值 |
注意:范围形式按 Unicode 码「点」(而非码元)遍历字符串,就像
for…of循环那样。更多信息请参阅「字符串方法说明」。
示例
条件形式
遍历数组:
SugarCube
/* 给定: */
<<set $pies to ["Apple", "Blueberry", "Cherry", "Pecan", "Raspberry"]>>
<<for _i to 0; _i lt $pies.length; _i++>>
<<print _i + 1>>. $pies[_i]
<</for>>
/* 输出 */
1. Apple
2. Blueberry
3. Cherry
4. Pecan
5. Raspberry范围形式
遍历数组:
SugarCube
<<set $pies to ["Apple", "Blueberry", "Cherry", "Pecan", "Raspberry"]>>
<<for _i, _name range $pies>>
<<print _i + 1>>. _name
<</for>>
/* 输出 1. Apple 到 5. Raspberry */遍历整数:
SugarCube
<<for _value range 5>>
<<print _value + 1>>.
<</for>>
/* 输出 1. 到 5. */