【发布时间】:2016-11-17 12:30:40
【问题描述】:
似乎u,一个可变借用,在
let v = &*u;
u 和 v 都是不可变的借用引用,因此它们都是允许的。
use std::ascii::AsciiExt;
fn show(a: &str) {
println!("a={}", a);
}
fn main() {
let mut t = String::new();
t.push('s');
let u = &mut t;
u.make_ascii_uppercase(); // u is really mutable here
let v = &*u; // u became immutable to allow this?
show(u); // both u and v are now accessible!
show(v);
}
输出:
a=S
a=S
如果我尝试在之后使用u 作为可变借用
show(v);
编译器会记得
let v = &*u;
确实不允许:
cannot borrow `*u` as mutable because it is also borrowed as immutable
这是一个错误还是真的有一些“当不再需要可变性时自动将可变借用转换为不可变”的原则?我正在使用 Rust 1.13.0。
【问题讨论】:
标签: rust