给定多个相似的结构,实现匹配签名的函数可能是有用的.
下面的简单示例可以很好地工作,但不能确保所有函数都遵循相同的函数签名.
impl FooStruct {
pub fn calc_value(seed: i64) -> i64 { /* function body! */ }
}
impl BarStruct {
pub fn calc_value(seed: i64) -> i64 { /* function body! */ }
}
Run Code Online (Sandbox Code Playgroud)
使用特征解决了这个问题:
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! */ }
}
Run Code Online (Sandbox Code Playgroud)
但是,现在我必须添加use some_module::CanCalcValue;我不想打电话的地方calc_value.
有没有办法定义一个可以使用而不必确保它在命名空间中的特征?
换句话说,有时逻辑上一个特征是有意义的,因为多个结构共享一个签名,但我避免使用它,因为它对use整个代码库的特性变得烦人.
注意:虽然目前没有RFC,但在RFC问题跟踪器中有关于此主题的讨论.
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |