Vec<T>
次の 2 つの方法があります。
fn push(&mut self, value: T)
fn split_at_mut(&mut self, mid: usize) -> (&mut [T], &mut [T])
どちらもベクトルへの変更可能な参照を取ります。ただし、借用の範囲は異なるようです。たとえば、次のようになります。
fn works() {
let mut nums: Vec<i64> = vec![1,2,3,4];
nums.push(5);
println!("{}", nums.len());
}
fn doesnt_work() {
let mut nums: Vec<i64> = vec![1,2,3,4];
let (l,r) = nums.split_at_mut(2);
println!("{}", nums.len());
}
fn also_works() {
let mut nums: Vec<i64> = vec![1,2,3,4];
let _ = nums.split_at_mut(2);
println!("{}", nums.len());
}
関数はコンパイルされdoesnt_work
ず、変更可能な借用が既にnums
あり、それが終了し、関数の最後であると述べています。から返された値を無視すると、問題は解決しますsplit_at_mut
。