我在 Rust 中有一个特性,它为其函数提供了一些默认实现。
trait MyTrait {
fn do_something(&self);
fn say_hello(&self) {
println!("Hello I am default");
}
}
Run Code Online (Sandbox Code Playgroud)
一些实现者扩展了这个特性并使用提供的默认值
struct MyNormalImplementor {}
impl MyTrait for MyNormalImplementor {
fn do_something(&self) {
// self.doing_some_normal_stuff();
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想要一个扩展特性行为的实现器,但有时仍然使用默认实现。当然默认实现更复杂,我想遵循DRY原则。
struct MySpecializedImplementor(bool)
impl MyTrait for MySpecializedImplementor {
fn do_something(&self) {
// self.doing_some_wild_stuff();
}
fn say_hello(&self) {
if self.0 {
println!("hey, I am special");
} else {
MyTrait::say_hello(self);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里MyTrait::say_hello(self);立即在无限循环中调用专用函数。我没有找到任何方法来限定函数调用,以便调用 in 中的默认实现MyTrait。有什么方法可以实现这一点,还是我必须为这种情况创建一个代理函数(也将在我的特征的公共接口中)?