我有一个特点叫Sleep:
pub trait Sleep {
fn sleep(&self);
}
Run Code Online (Sandbox Code Playgroud)
我可以Bed为每个结构提供不同的实现,但事实证明大多数人以很少的方式睡觉.你可以睡在床上:
pub trait HasBed {
fn sleep_in_bed(&self);
fn jump_on_bed(&self);
}
impl Sleep for HasBed {
fn sleep(&self) {
self.sleep_in_bed()
}
}
Run Code Online (Sandbox Code Playgroud)
如果你露营,你可以睡在帐篷里:
pub trait HasTent {
fn sleep_in_tent(&self);
fn hide_in_tent(&self);
}
impl Sleep for HasTent {
fn sleep(&self) {
self.sleep_in_tent()
}
}
Run Code Online (Sandbox Code Playgroud)
有一些古怪的案例.我有一个可以靠墙站着睡觉的朋友,但大多数人大多数时候会陷入一些简单的情况.
我们定义一些结构并让它们Sleep:
struct Jim;
impl HasBed for Jim {
fn sleep_in_bed(&self) {}
fn jump_on_bed(&self) {}
}
struct Jane;
impl HasTent for Jane {
fn …Run Code Online (Sandbox Code Playgroud) 该derive属性允许为数据结构自动实现某些特征.参考文献给出了一个例子:
#[derive(PartialEq, Clone)]
struct Foo<T> {
a: i32,
b: T
}
Run Code Online (Sandbox Code Playgroud)
是否可以添加自己的可导出特征,还是由编译器修复?