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));
}