3个版本
0.1.2 | 2019年9月6日 |
---|---|
0.1.1 | 2019年9月6日 |
0.1.0 | 2019年9月6日 |
#204 在 #define
29 每月下载量
用于 2 crates
9KB
89 代码行
多重默认特质实现(multi-default-trait-impl)
为特质定义多个默认实现。
此库包含两个属性宏:定义默认特质实现的 default_trait_impl
,以及使用你已定义的默认特质实现的 trait_impl
。
这在测试时特别有用,当许多模拟类型将有非常相似的特质实现,但不想使用规范默认特质实现时。
示例
首先,为特质 Car
定义默认特质实现
#[default_trait_impl]
impl Car for NewCar {
fn get_mileage(&self) -> Option<usize> { Some(6000) }
fn has_bluetooth(&self) -> bool { true }
}
NewCar
不需要预先定义。
然后,为类型实现新的默认实现
struct NewOldFashionedCar;
#[trait_impl]
impl NewCar for NewOldFashionedCar {
fn has_bluetooth(&self) -> bool { false }
}
struct WellUsedNewCar;
#[trait_impl]
impl NewCar for WellUsedNewCar {
fn get_mileage(&self) -> Option<usize> { Some(100000) }
}
这将确保我们的结构体使用 NewCar
默认值,而无需更改规范 Car
默认实现
fn main() {
assert_eq!(NewOldFashionedCar.get_mileage(), Some(6000));
assert_eq!(NewOldFashionedCar.has_bluetooth(), false);
assert_eq!(WellUsedNewCar.get_mileage(), Some(100000));
assert_eq!(WellUsedNewCar.has_bluetooth(), true);
}
依赖项
~1.5MB
~35K SLoC