Вы не можете сделать две изменяемые ссылки на одни и те же данные. Это явно запрещается средством проверки заимствований, чтобы предотвратить одновременные изменения. Однако вы можете обойти проверку чеков с помощью блоков unsafe
.
Хотя в вашем случае v[0]
и v[1]
явно являются отдельными кусками, это не выдерживает серьезного внимания. Что, если v
- это какая-то карта, называемая NullMap
, которая отображает все элементы в одно поле? Как известно компилятору в Vec
операциях v[0];v[1];
безопасно, но в NullMap
нет?
Если вы пытаетесь поменять два элемента массива, почему бы не пойти slice::swap
?
fn main() {
let mut v = vec![1, 2, 3];
v.swap(0,1);
println!("{:?}",v);
}
Также v
должен быть mut
, потому что вы меняете вектор. Неизменяемая версия будет клонировать и выполнять обмен на нее.
e.getValueIsAdjusting
- это то, что вы ищете. Как указано в javadoc этого метода
Возвращает, является ли это одним в серии из нескольких событий, где изменения все еще выполняются
blockquote>
Это обычный способ, вы должны фильтровать с помощью метода getValueIsAdjusting ()