loop 循环
loop
类型: MethodDeclaration
所属类: CommandFunctionList
定义位置: command.ts
描述
循环
参数
| 参数名 | 类型 | 描述 | 默认值 | 
|---|---|---|---|
| \{mode, conditions, commands\} | `{ | ||
| mode: string | |||
| conditions: Array<object> | |||
| commands: CommandDataList | |||
| }` | - | - | 
返回值
类型: CommandFunction \| null
源代码
位置: 第 2890 行
protected loop({mode, conditions, commands}: {
    mode: string
    conditions: Array<object>
    commands: CommandDataList
  }): CommandFunction | null {
    if (commands.length === 0) {
      return null
    }
    const cmdpath = this.stack[0].path
    const context = this.stack.get()
    const nextCommands = context.commands
    const nextIndex = context.index + 1
    let infiniteLoopTest = Function.empty
    if (Stats.debug) {
      let timestamp = 0
      let cycleCount = 0
      infiniteLoopTest = () => {
        if (timestamp !== Time.timestamp) {
          timestamp = Time.timestamp
          cycleCount = 1
        } else if (++cycleCount > 100000000) {
          CommandList = nextCommands
          CommandIndex = nextIndex
          console.error(`The number of loops exceeds 100000000, it may be an infinite loop.\n${cmdpath}`)
        }
      }
    }
    if (conditions.length !== 0) {
      const tester = Command.compileConditions(mode, conditions)
      const loopCommands = Command.compile(commands, () => {
        if (tester()) {
          CommandIndex = 0
          infiniteLoopTest()
        } else {
          CommandList = nextCommands
          CommandIndex = nextIndex
        }
        return true
      }, true)
      return () => {
        if (tester()) {
          CommandList = loopCommands
          CommandIndex = 0
        }
        return true
      }
    } else {
      const loopCommands = Command.compile(commands, () => {
        CommandIndex = 0
        infiniteLoopTest()
        return true
      }, true)
      return Command.goto(loopCommands, 0)
    }
  }
文档生成时间:2025/7/21 20:53:39