【发布时间】:2022-11-16 18:03:37
【问题描述】:
有人可以解释以下内容吗?
- 这个编译(解释:NLL
y在初始定义后没有被引用?)fn main() { let mut x = 5; let y = &x; let z = &mut x; println!("z: {}", z); }- 这个没有编译(解释:
z未被引用但只引入了之前的行所以仍然有效?)
fn main() { let mut x = 5; let y = &x; let z = &mut x; println!("y: {}", y); }- 这个编译(解释:NLL
z在初始定义后没有被引用?)
fn main() { let mut x = 5; let z = &mut x; let y = &x; println!("y: {}", y); }- 这个没有编译(只是为了看看引入行是否会导致
z不被println激活)
fn main() { let mut x = 5; let y = &x; let z = &mut x; let foo = String::from("foo"); println!("y: {}, foo: {}", y, foo); }我很困惑......我在书中找不到任何涵盖此特定案例的内容,但如果有人链接到解释此行为的内容,我将不胜感激。
- 这个没有编译(解释:
【问题讨论】:
-
我怀疑这本书(和语言参考)没有解释这些情况的具体规则的原因是因为语言团队仍在研究检测参考何时不重叠的方法,以使借用检查器更智能;以书面形式规定这种情况发生的确切时间可能为时过早且具有限制性。
标签: rust