Я бы принял другой ответ, который позволит мне избежать использования индекса.

у структуру данных в Rust. Он содержитVec&nbsp;пар ключ-значение. При вставке в структуру мне нужно найти соответствующий ключ и обновить как ключ, так и значение (которое на самом деле является дочерним указателем). Код выглядит примерно так, гдеpivots&nbsp;этоref mut&nbsp;вVec<Pivot>&nbsp;а такжеPivot&nbsp;это просто структура с двумя полями:

match pivots.iter_mut().find(|ref p| key <= p.min_key) { // first mutable borrow
    Some(ref mut pivot) => {
        // If there is one, insert into it and update the pivot key
        pivot.min_key = key;
        pivot.child.insert(key, value) // recursive call
    },
    // o/w, insert a new leaf at the end
    None => pivots.push(Pivot /* ... */) // second mutable borrow
}

Но есть проблема. Даже если я не использую изменяемый итератор во втором ответвленииmatch, заемщик жалуется, что я не могу заимствовать*pivots&nbsp;как изменяемые более одного раза за один раз ".

Это имеет смысл для меня, потому что первый заем все еще находится в объеме, даже если он не используется в этом случаеmatch, Это немного неудобно: умный контролер наверняка скажет, что заимствования не перекрываются. Я видел в сети кого-то, кто советовал использовать досрочный возврат, чтобы избежать этой проблемы, например:

match pivots.iter_mut().find(|ref p| key <= p.min_key) {
    Some(ref mut pivot) => {
        pivot.min_key = key;
        pivot.child.insert(key, value);
        return
    },
    None => ()
};
pivots.push(Pivot /* ... */)

но это кажется трудным для понимания, особенно когда это означает разбиение этого кода на его собственную функцию, чтобы позволитьreturn, Есть ли более идиоматический способ выполнить операцию обновления или вставки?