E1036#
循环标签名称隐藏了已经在作用域中的标签。
循环标签在它们的作用域内必须是唯一的。当标签名在嵌套作用域内被重复使用时,它会遮蔽外部标签,这可能导致对 break
或 continue
语句所引用的循环产生混淆。
此警告有助于防止由于标签遮蔽而导致错误地中断或继续到错误的循环级别。建议为不同的循环使用不同的、描述性的标签名称,以使代码的意图清晰。
错误示例#
fn f(xss : Array[Array[Int]]) -> Unit {
l~: for xs in xss {
l~: for x in xs {
// ^^ Warning: The label name `l` shadows a label name that is already in
// scope.
if x > 0 {
break l~
}
}
}
}
建议#
为不同的循环使用不同的、描述性的标签名称,以使代码的意图清晰。