Вы не можете.Поля 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);
}
Редактировать 1: Да, это возможно согласно Ответу Юсуке НОЖИМА .Вам нужно будет добавить атрибут #![feature(nll)]
в ваш код, используя ржавчину по ночам.
#![feature(nll)]
#[derive(Debug)]
struct Point {
x: Vec<i32>,
y: i32,
}
...
...
Для получения дополнительной информации см. NLL RFC