我在 Rust 中有一个 trait,它为其函数提供了一些默认实现。
有些实现者会扩展这个特性并使用提供的默认值。
trait MyTrait {
fn do_something(&self);
fn say_hello(&self) {
println!("Hello I am default");
}
}
有些实现者会扩展这个特性并使用提供的默认值。
struct MyNormalImplementor {}
impl MyTrait for MyNormalImplementor {
fn do_something(&self) {
// self.doing_some_normal_stuff();
}
}
现在我希望有一个实现者来扩展特征的行为,但仍然有时使用默认实现。当然,默认实现更复杂,我想遵循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);
}
}
}
这里MyTrait::say_hello(self);
会立即在一个无限循环中调用特定的函数。我没有找到任何方法来限定函数调用,以便调用MyTrait
中的默认实现。有没有办法实现这一点,还是我必须为此创建一个代理函数(也将位于我的 trait 的公共接口中)?
syn::Visit
访问器特性只需一堆独立的自由函数,而特性方法的默认实现只是调用这些函数。 - Frxstrem