这是一个例子
#[derive(Debug)]
struct Point {
x: Vec<i32>,
y: i32,
}
let mut p = Point { x: vec![1], y: 7 };
// borrow out mutable reference p to a and b
let Point { x: a, y: b } = &mut p;
// mutate a
a.push(2);
// how do I get p back?
println!("{:?}", p);
Run Code Online (Sandbox Code Playgroud)
有没有办法在不创建新块或抽象功能的情况下解除引用?
你不能.这些领域x和y(可变)借用,这意味着Point(可变)借用.所有这些都发生在相同的范围内,因此结果Point将保持可变地借用,直到范围结束,并且在可变地借用数据之后,您不能对数据进行(不可变或可变)借用.内部可变性是您需要了解的内容.
使用RefCell<T>:
use std::cell::RefCell;
#[derive(Debug)]
struct Point {
x: RefCell<Vec<i32>>,
y: i32,
}
fn main() {
let p = Point {
x: RefCell::new(vec![1]),
y: 7,
};
(*p.x.borrow_mut()).push(2);
println!("{:?}", p);
}
Run Code Online (Sandbox Code Playgroud)
编辑1:
是的,根据Yusuke NOJIMA的答案是可能的.您需要将#![feature(nll)]代码添加到代码中,每晚使用锈.
#![feature(nll)]
#[derive(Debug)]
struct Point {
x: Vec<i32>,
y: i32,
}
...
...
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅NLL RFC
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |