dyn 和 trait
dyn 是 Rust 中的一个关键字,用于定义动态 trait 对象。
什么是trait?
就是接口
// 定义一个名为 `Greeting` 的 trait
trait Greeting {
// 定义一个方法 `greet`,接受一个字符串参数,并返回一个字符串
fn greet(&self, name: &str) -> String;
}
// 实现 `Greeting` trait 的结构体 `EnglishSpeaker`
struct EnglishSpeaker;
// 实现 `Greeting` trait 的方法
impl Greeting for EnglishSpeaker {
fn greet(&self, name: &str) -> String {
format!("Hello, {}!", name)
}
}
// 实现 `Greeting` trait 的结构体 `ChineseSpeaker`
struct ChineseSpeaker;
// 实现 `Greeting` trait 的方法
impl Greeting for ChineseSpeaker {
fn greet(&self, name: &str) -> String {
format!("你好,{}!", name)
}
}
// 使用 `Greeting` trait 的函数
fn say_hello(greeter: &dyn Greeting, name: &str) {
let greeting = greeter.greet(name);
println!("{}", greeting);
}
fn main() {
let english_speaker = EnglishSpeaker;
let chinese_speaker = ChineseSpeaker;
say_hello(&english_speaker, "Alice");
say_hello(&chinese_speaker, "张三");
}