检查运行时是否存在属性或方法?检查Trait是否在运行时存在?

时间:2017-07-12 05:43:09

标签: methods properties rust traits

寻找正确的方法

if(self.MyProperty) { /* ... */ }
  

错误:尝试访问类型MyProperty上的字段MyType,但未找到具有该名称的字段

if(self.MyMethod){ /* ... */ }
  

错误:尝试在类型MyMethod

上获取方法MyType的值

作为最后的手段,至少如何检查Trait是否已实施?

1 个答案:

答案 0 :(得分:2)

Rust中不存在这个概念。虽然通过Any有一些有限的向下转换功能,但这应该作为最后的手段。你应该做的是创造一个新的特征,为你揭示所有这些决定。

重用my_method方法的示例:

trait YourTrait {
    fn try_my_method(&self, arg: SomeArg) -> Option<MyMethodResult> {
        None
    }
}

impl YourTrait for SomeType {
    fn try_my_method(&self, arg: SomeArg) -> Option<MyMethodResult> {
        Some(self.my_method(arg))
    }
}

在您的代码中,您可以调用

if let Some(result) = self.try_my_method() {
    /* ... */
}