如何定义特征的可选方法?

时间:2018-08-19 07:43:03

标签: interface rust custom-type

Rust是否具有一项功能,通过它我可以在特征上创建可能不存在的定义方法?

我意识到Option可用于处理可能不存在的属性,但我不知道如何使用方法来实现相同的目的。

在TypeScript中,问号表示该方法可能不存在。这是RxJs的摘录:

export interface NextObserver<T> {
  next?: (value: T) => void;
  // ...
}

如果Rust中不存在此功能,那么应该如何处理程序员不知道是否存在方法的对象?恐慌?

1 个答案:

答案 0 :(得分:11)

您可以尝试为此使用空的默认方法实现:

trait T {
    fn required_method(&self);

    // This default implementation does nothing        
    fn optional_method(&self) {}
}

struct A;

impl T for A {
    fn required_method(&self) {
        println!("A::required_method");
    }
}

struct B;

impl T for B {
    fn required_method(&self) {
        println!("B::required_method");
    }

    // overriding T::optional_method with something useful for B
    fn optional_method(&self) {
        println!("B::optional_method");
    }
}

fn main() {
    let a = A;
    a.required_method();
    a.optional_method(); // does nothing

    let b = B;
    b.required_method();
    b.optional_method();
}

Playground