小编Rüd*_*wig的帖子

Rust 在专用版本中调用函数的默认实现

我在 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。有什么方法可以实现这一点,还是我必须为这种情况创建一个代理函数(也将在我的特征的公共接口中)?

polymorphism traits rust default-implementation

3
推荐指数
1
解决办法
196
查看次数