E4221

E4221#

编译器诊断名称:control_in_with_pattern_default

or-pattern 的 with 子句中的默认表达式试图通过 returnbreakcontinueraise 转移控制流。默认表达式必须在局部产生值,不能离开所在的模式。

错误示例#

///|
pub fn value_or_zero(value : Int?) -> Int {
  match value {
    Some(x) | (None with x = { return 0 }) => x
  }
}

修改建议#

默认值应使用普通表达式;需要的控制流应在模式匹配完成后执行。

///|
pub fn value_or_zero(value : Int?) -> Int {
  match value {
    Some(x) | (None with x = 0) => x
  }
}