13-使用+将特征组合为区间
4.4.3 使用“+”将特征组合为区间
我们还可以使用符号“+”为泛型指定多个特征区间。让我们来看一下标准库中HashMap类型的impl代码块:
impl<K: Hash + Eq, V> HashMap<K, V, RandomState>
这里,我们可以看到表示HashMap键类型的K必须实现Hash特征和Eq特征。
我们还可以将若干特征组合起来构建新的特征,如下:
// traits_composition.rs
trait Eat {
fn eat(&self) {
println!("eat");
}
}
trait Code {
fn code(&self) {
println!("code");
}
}
trait Sleep {
fn sleep(&self) {
println!("sleep");
}
}
trait Programmer : Eat + Code + Sleep {
fn animate(&self) {
self.eat();
self.code();
self.sleep();
println!("repeat!");
}
}
struct Bob;
impl Programmer for Bob {}
impl Eat for Bob {}
impl Code for Bob {}
impl Sleep for Bob {}
fn main() {
Bob.animate();
}
在上述代码中,我们创建了一个新的特征Programmer,它由3个特征组合而成:Eat、Code、Sleep。通过这种方式,我们对类型设置了约束,因此如果类型T实现了Programmer,那么它必须实现上述所有特征。运行代码后的输出结果如下:
eat
code
sleep
repeat!