如何确保结构一致地实现函数,没有调用者必须明确地“使用”特征?

时间:2017-02-08 05:44:56

标签: rust traits

给定多个相似的结构,实现与签名匹配的函数可能很有用。

下面的简单示例很有效,但不能确保所有函数都遵循相同的函数签名。

pub trait CanCalcValue {
    fn calc_value(seed: i64) -> i64;        
}

impl CanCalcValue for FooStruct {
    fn calc_value(seed: i64) -> i64 { /* function body! */ }
}
impl CanCalcValue for BarStruct {
    fn calc_value(seed: i64) -> i64 { /* function body! */ }
}

使用特征解决了这个问题:

use some_module::CanCalcValue;

但是,现在我必须在任何地方添加calc_value,我不会打电话给use

有没有办法定义一个可以使用而不必确保它在命名空间中的特征?

换句话说,有时逻辑上一个特征是有意义的,因为多个结构共享一个签名,但我避免使用它,因为在整个代码库中必须public slots: void slot(); 特征变得烦人。

注意: RFC issue tracker中有关于此主题的讨论,但目前没有RFC。

1 个答案:

答案 0 :(得分:7)

  

有没有办法定义一个可以在不必确保名称空间的情况下使用的特征?

简而言之,没有。要使用特征,您必须导入它。没有特征,您就无法确保签名是相同的。