Вы можете разыменовать и заново заимствовать изменяемые ссылки, а затем добавить их в новый Vec
:
fn main() {
let mut st = String::new();
let mut_vec = vec![&mut st];
let immut_vec = mut_vec.into_iter().map(|x| &*x).collect();
cool_func(immut_vec);
}
fn cool_func(_: Vec<&String>) -> bool {
false
}
Обратите внимание, однако, что это потребляет оригинальную Vec
- вы не можете обойтисьэто, как если бы оригинал Vec
еще существовал, у вас были бы как изменяемые, так и неизменные ссылки на один и тот же фрагмент данных, что компилятор не допустит.