E4104

E4104#

当前循环的参数数量与 continue 提供的参数数量不同。

此错误发生在 continue 语句提供的参数数量与循环所期望的参数数量不匹配时。在带有显式循环变量的 for 循环中,如果使用带参数的 continue,必须提供与循环头中声明的变量数量相同的参数。

例如,如果一个 for 循环有两个循环变量,那么该循环中任何带参数的 continue 语句也必须正好提供两个参数。参数数量不足或过多都会触发此错误。

请注意,在 for 循环中,你可以省略 continue 语句中的所有参数。在这种情况下,循环将使用循环头中指定的更新表达式。但是,如果你为 continue 提供参数,那么参数数量必须与循环变量数量匹配。

例如,在一个有两个变量的 for 循环中:

  • continue(没有参数)将使用默认更新

  • continue x, y(有两个参数)是有效的

  • continue xcontinue x, y, z 会触发此错误

错误示例#

///|
pub fn g(x : Int, y : Int) -> Int {
  for i = x, j = y; i + j < 10; i = i + 1, j = j + 1 {
    if i < j {
      continue i + 2, j + 1, i + j
      //    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Error: Current loop expects 2 arguments, but
      //                                       `continue` is supplied with 3 arguments
    }
  } nobreak {
    42
  }
}

建议#

要修复此错误,请确保 continue 提供的参数数量与循环变量数量匹配。例如:

///|
pub fn g(x : Int, y : Int) -> Int {
  for i = x, j = y; i + j < 10; i = i + 1, j = j + 1 {
    if i < j {
      continue i + 2, j + 1
    } else {
      continue
    }
  } nobreak {
    42
  }
}