fn main() {
let message = enum_demo(
Message::Request,//当作一个闭包,函数使用 Message::Request(person :Person)->Message::Request
Person {
name: "rust".into(),
},
);
println!("first {:?}", message);
let person = Person {
name: "java".into(),
};
let message = enum_demo(
move |p| Message::Request(person),
Person {
name: "golang".into(),
},
);
println!("second {:?}", message);
}
fn enum_demo<F>(f: F, person: Person) -> Message
where
F: FnOnce(Person) -> Message,
{
f(person)
}
#[derive(Debug)]
enum Message {
Request(Person),
}
#[derive(Clone, Debug)]
struct Person {
name: String,
}
参考深入浅出rust第二章 2.3.4 enum节
参考 https://my.oschina.net/zengsai/blog/755894 中的解释
tupe struct variant。在Rust中申明这样的变元时,编译会自动为其生成一个构造函数
fn Message::Request(person :Person)->Message::Request {
Message::Request(person)
}