let mut u:[usize;3] = [0;3];
let mut v = vec![];
for i in 0..3 {
u[i] = i;
let e = &(u[i]);
v.push(e);
}
error[E0506]: cannot assign to `u[_]` because it is borrowed
--> src/lib.rs:5:9
|
5 | u[i] = i;
| ^^^^^^^^ assignment to borrowed `u[_]` occurs here
6 | let e = &(u[i]);
| ------- borrow of `u[_]` occurs here
7 | v.push(e);
| - borrow later used here
( Детская площадка )
Я понимаю, что компилятор спасает меня от себя, но я действительно хочу это поведение, и я не хочу его принудительно через unsafe
, как я уверен, облажаться. Какие у меня варианты?
У меня такое ощущение, что это как-то связано с жизнями, которые мне еще предстоит понять. Возможно, это связано с наличием двух владельцев для одних и тех же данных? Я не думаю, что это должно было быть проблемой, пока ты пережил v.
Как я могу оправиться от этого? Или это просто запрещено из-за нескольких владельцев, и поэтому мне нужно переосмыслить свой подход?
Я переживаю эту проблему, потому что мне нужно скопировать тип, который можно клонировать, но мне придется задайте другой вопрос для этого.