Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modifying a slice of str's

I have a Vec<&str> and I want to remove a prefix from all of its elements. This is what I vaguely intend:

fn remove_prefix(v: &mut [&str], prefix: &str) {
    for t in v.iter_mut() {
        t = t.trim_left_matches(prefix);
    }
}

However I can't seem to get all the mut's in the right place. Or maybe it's a lifetime related thing? Can anyone give me a hint? Here is my current error:

makefile_to_qbs.rs:22:7: 22:34 error: mismatched types:
 expected `&mut &str`,
    found `&str`
(values differ in mutability) [E0308]
makefile_to_qbs.rs:22           t = t.trim_left_matches(prefix);
like image 891
Timmmm Avatar asked Jun 29 '15 13:06

Timmmm


1 Answers

t is of type &mut &str, a mutable pointer to a string slice. You wish to alter what the mutable reference points to, so you need to store a &str in *t.

fn remove_prefix(v: &mut [&str], prefix: &str) {
    for t in v.iter_mut() {
        *t = t.trim_left_matches(prefix);
    }
}
like image 90
Chris Morgan Avatar answered Nov 10 '22 22:11

Chris Morgan