E0017#
标识符的使用存在歧义。如果它指的是循环变量,请使用 as <id>
在模式中绑定它。如果它指的是变量在进入循环前的原始值,请在循环外部将其绑定到一个新的绑定器。
错误示例#
///|
fn main {
let a : @string.View = "asdf"
loop a {
[_, .. d] => {
println(a)
// ^
// Warning: The usage of 'a' is ambiguous. If it refers to the loop
// variable, please use `as a` to bind it in the pattern. If it refers to
// the original value of 'a' before entering the loop, please bind it to a
// new binder outside the loop.
continue d
}
[] => ()
}
}
Output:
asdf
asdf
asdf
asdf
因为 a
指的是进入循环前的 a
的值,因此该值始终相同。
建议#
在许多情况下,您可能需要引用随循环迭代而变化的循环变量。如果需要,请使用 as <id>
将其绑定到模式中。
///|
fn main {
let a : @string.View = "asdf"
loop a {
[_, .. d] as a => {
println(a)
continue d
}
[] => ()
}
}
Output:
asdf
sdf
df
f
或者,如果你想在进入循环之前引用变量的原始值,可以显式地将其绑定到循环外的另一个名称。
///|
fn main {
let a : @string.View = "asdf"
let b = a
loop a {
[_, .. d] => {
println(b)
continue d
}
[] => ()
}
}
Output:
asdf
asdf
asdf
asdf