Skip to content

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. */
评论