if 如果
if
类型: MethodDeclaration
所属类: CommandFunctionList
定义位置: command.ts
描述
如果
参数
| 参数名 | 类型 | 描述 | 默认值 | 
|---|---|---|---|
| \{branches, elseCommands\} | `{ | ||
| branches: Array<any> | |||
| elseCommands?: CommandDataList | |||
| }` | - | - | 
返回值
类型: CommandFunction
源代码
位置: 第 2735 行
protected if({branches, elseCommands}: {
    branches: Array<any>
    elseCommands?: CommandDataList
  }): CommandFunction {
    const {commands, index} = this.stack.get()
    const pop = Command.goto(commands, index + 1)
    const length = branches.length
    const testers = new Array(length)
    const functions = new Array(length)
    for (let i = 0; i < length; i++) {
      const {mode, conditions, commands} = branches[i]
      testers[i] = Command.compileConditions(mode, conditions)
      functions[i] = Command.goto(Command.compile(commands, pop), 0)
    }
    const elseFn = elseCommands !== undefined
    ? Command.goto(Command.compile(elseCommands, pop), 0)
    : Command.skip
    if (length < 6) {
      const [a, b, c, d, e] = testers
      const [f, g, h, i, j] = functions
      switch (length) {
        case 1: return () => (a() ? f : elseFn)()
        case 2: return () => (a() ? f : b() ? g : elseFn)()
        case 3: return () => (a() ? f : b() ? g : c() ? h : elseFn)()
        case 4: return () => (a() ? f : b() ? g : c() ? h : d() ? i : elseFn)()
        case 5: return () => (a() ? f : b() ? g : c() ? h : d() ? i : e() ? j : elseFn)()
      }
    }
    return () => {
      for (let i = 0; i < length; i++) {
        if (testers[i]()) {
          return functions[i]()
        }
      }
      return elseFn()
    }
  }
文档生成时间:2025/7/21 20:53:39