Sar*_*gis 3 mutable rust borrowing
我正在尝试Rust并且在理解"借用"方面存在问题.
struct Foo<T> {
data: T,
}
impl<T> Foo<T> {
fn new(data: T) -> Self {
Foo {
data: data,
}
}
}
fn main() {
let mut foo = Foo::new("hello");
let x = &mut foo;
let y = &mut foo;
println!("{}", foo.data);
}
Run Code Online (Sandbox Code Playgroud)
为什么这段代码编译没有错误?毕竟,我得到了多个可变引用foo.以下内容写入文档:
参考规则
让我们回顾一下我们讨论的关于参考文献的内容:
a)在任何给定时间,您可以拥有(但不是两个)一个可变引用或任意数量的不可变引用.
b)参考文献必须始终有效.
这种行为的原因是什么?谢谢!
在我的 Rust 版本(1.29.1)上,我确实遇到了多重借用错误。
我认为您在这里受益于非词法生命周期,或者编译器巧妙地优化*代码为:
let mut foo = Foo::new("hello");
{ let x = &mut foo; }
{ let y = &mut foo; }
println!("{}", foo.data);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为你没有使用xand y。
*:来自 @mcarton:优化发生在借用检查通过之后,因此唯一的选择是 NLL。