自定义 Derive
在 Rust 中,你始终可以能够通过derive属性来自动实现一些特性:
#[derive(Debug)]
struct Pet {
name: String,
}
Pet
实现了 Debug
特性, 使用了相当少的代码,非常醒目。举个例子,如果没有 derive
,你需要这样写:
use std::fmt;
struct Pet {
name: String,
}
impl fmt::Debug for Pet {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Pet { name } => {
let mut debug_trait_builder = f.debug_struct("Pet");
let _ = debug_trait_builder.field("name", name);
debug_trait_builder.finish()
}
}
}
}
哈!
但是,这仅适用于作为标准库的一部分提供的特征; 它不可定制。 但是现在,当有人想要推导出你的特质时,你可以告诉Rust要做什么。 这在serde, Diesel等流行的crate中大量使用。
获取更多信息,包括如果构建你自己的derive,查阅 The Rust Programming Language.
当前内容版权归 rust-lang-cn 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 rust-lang-cn .