cannot borrow as mutable

cat src/main.rs 
#[derive(Debug)]
struct f_closure{
        name: String,
}
impl f_closure{
        fn fn_call( self) -> String{
                        self.name
        }
}
fn get_string<T>(name: String , mut f: T) -> String where T : FnMut(String) -> String{
                f(name)
        }
fn main() {
                        let name = String::from("kobe");
                        let  f1= |x : String | -> String {
                        name.push_str("24");
                        format!("{}+ {}",x, name)
        };
    let name2 = String::from("dirk");
        println!("name2 {}",get_string(name2, f1));

}
cargo build
   Compiling own v0.1.0 (/data2/rust/fnmut)
warning: type `f_closure` should have an upper camel case name
 --> src/main.rs:2:8
  |
2 | struct f_closure{
  |        ^^^^^^^^^ help: convert the identifier to upper camel case: `FClosure`
  |
  = note: `#[warn(non_camel_case_types)]` on by default

error[E0596]: cannot borrow `name` as mutable, as it is not declared as mutable
  --> src/main.rs:16:7
   |
14 |             let name = String::from("kobe");
   |                 ---- help: consider changing this to be mutable: `mut name`
15 |             let  f1= |x : String | -> String {
16 |             name.push_str("24");
   |             ^^^^ cannot borrow as mutable

error: aborting due to previous error; 1 warning emitted

For more information about this error, try `rustc --explain E0596`.
error: could not compile `own`.

To learn more, run the command again with --verbose.
cat  src/main.rs 
#[derive(Debug)]
struct f_closure{
        name: String,
}
impl f_closure{
        fn fn_call( self) -> String{
                        self.name
        }
}
fn get_string<T>(name: String , mut f: T) -> String where T : FnMut(String) -> String{
                f(name)
        }
fn main() {
                        let mut name = String::from("kobe");
                        let  f1= |x : String | -> String {
                    name.push_str("24");
                        format!("{}+ {}",x, name)
        };
    let name2 = String::from("dirk");
        println!("name2 {}",get_string(name2, f1));

}
原文地址:https://www.cnblogs.com/dream397/p/14192035.html