On 2020-10-02 at 17:53 Jason Ekstrand <ja...@jlekstrand.net> wrote: > b. Pulling two items out of a list and looking at them is painful. > Unfortunately, this is a surprisingly common operation in compiler > passes. The usual way to get around it is to structure your code such > that you first look up all the information you want with non-mut > things and then you take a mut reference to the thing you want to > change and change it.
You can obtain concurrent &mut references to multiple elements of a data structure using iterators: let mut v = vec![0, 1, 2, 3, 4, 5]; let mut iter = v.iter_mut(); let x = iter.nth(3).unwrap(); // mutable ref to element 3 let y = iter.next().unwrap(); // mutable ref to element 4 *x += 100; *y += 200; println!("{:?}", v); // => [0, 1, 2, 103, 204, 5] I can't say this is the best solution in all cases, but it may be useful some of the time. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev