E4104#
当前循环的参数数量与 continue 提供的参数数量不同。
此错误发生在 continue 语句提供的参数数量与循环所期望的参数数量不匹配时。在带有显式循环变量的 for 循环中,如果使用带参数的 continue,必须提供与循环头中声明的变量数量相同的参数。
例如,如果一个 for 循环有两个循环变量,那么该循环中任何带参数的 continue 语句也必须正好提供两个参数。参数数量不足或过多都会触发此错误。
请注意,在 for 循环中,你可以省略 continue 语句中的所有参数。在这种情况下,循环将使用循环头中指定的更新表达式。但是,如果你为 continue 提供参数,那么参数数量必须与循环变量数量匹配。
例如,在一个有两个变量的 for 循环中:
continue(没有参数)将使用默认更新continue x, y(有两个参数)是有效的continue x或continue 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
}
}