当前位置:嗨网首页>书籍在线阅读

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!