E4110

E4110#

该循环不应该返回值,请移除 break 的参数,或添加 nobreak 分支。

当在不应该返回值的循环中使用带有参数的 break 语句时,就会发生此错误。此错误适用于以下循环:

  • While 循环

  • 带有更新表达式 for 循环

  • for .. in 循环

这些循环结构没有从循环体返回值的机制。如果您需要使用值中断循环,您必须:

  1. 如果您不需要从循环中返回值,请从 break 语句中删除参数,或

  2. 添加一个 nobreak 分支,用于处理循环正常完成并提供返回值的情况

错误示例#

///|
pub fn f(x : Int) -> Unit {
  for i in 0..<=x {
    break i
    //  ^^^^^^^^ Error: The for loop is not expected to yield a value, please
    //                  remove the argument of the `break` or add an `else` branch.
  }
}

建议#

要修复此错误,您可以:

  • break 语句中删除参数。例如:

///|
pub fn stop_at_zero(x : Int) -> Unit {
  for i in 0..<=x {
    if i == 0 {
      break
    }
    println(i)
  }
}
  • 添加一个 nobreak 分支,用于处理循环正常完成并提供返回值的情况。例如:

///|
pub fn first_index_or_default(x : Int) -> Int {
  for i in 0..<=x {
    break i
  } nobreak {
    42
  }
}