[root@bogon fnmut]# 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));
let name3 = String::from("lakers ");
println!("name2 {}",get_string(name3, f1));
}
[root@bogon fnmut]# 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[E0382]: use of moved value: `f1`
--> src/main.rs:22:40
|
20 | println!("name2 {}",get_string(name2, f1));
| -- value moved here
21 | let name3 = String::from("lakers ");
22 | println!("name2 {}",get_string(name3, f1));
| ^^ value used here after move
|
note: closure cannot be moved more than once as it is not `Copy` due to moving the variable `name` out of its environment
--> src/main.rs:16:7
|
16 | name.push_str("24");
| ^^^^
error: aborting due to previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0382`.
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));
//let name3 = String::from("lakers ");
//println!("name2 {}",get_string(name3, f1));
}