Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Methods 检查运行时是否存在属性或方法?检查运行时特征是否存在?_Methods_Properties_Rust_Traits - Fatal编程技术网

Methods 检查运行时是否存在属性或方法?检查运行时特征是否存在?

Methods 检查运行时是否存在属性或方法?检查运行时特征是否存在?,methods,properties,rust,traits,Methods,Properties,Rust,Traits,寻找正确的方法去做 if(self.MyProperty) { /* ... */ } 错误:尝试访问类型MyType上的字段MyProperty,但未找到具有该名称的字段 或 错误:试图在类型MyType 作为最后的手段,至少应该如何检查一个特征是否被实现?这个概念在Rust中并不存在。虽然通过Any的下行能力有限,但这应该作为最后的手段。你应该做的是创造一种新的特质,让你暴露所有这些决定 重复使用my_方法的示例方法: trait YourTrait { fn try_my_met

寻找正确的方法去做

if(self.MyProperty) { /* ... */ }
错误:尝试访问类型
MyType
上的字段
MyProperty
,但未找到具有该名称的字段

错误:试图在类型
MyType


作为最后的手段,至少应该如何检查一个特征是否被实现?

这个概念在Rust中并不存在。虽然通过
Any
的下行能力有限,但这应该作为最后的手段。你应该做的是创造一种新的特质,让你暴露所有这些决定

重复使用
my_方法的示例
方法:

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))
    }
}

这个概念在Rust中并不存在。虽然通过
Any
的下行能力有限,但这应该作为最后的手段。你应该做的是创造一种新的特质,让你暴露所有这些决定

重复使用
my_方法的示例
方法:

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))
    }
}

这些是编译时错误;为什么您需要任何其他方式来检查它们?我正在发布描述中的错误。我可能只需要在运行时检查这些,因为我的元素是异构的,并且有一些动态逻辑,例如,处理事件。rust支持检查现有字段或方法吗?元素如何异构?你有
Vec
?是的,这就是我正在使用的——它将traits方法委托给其他方法,比如self.Controller.Method1。我还处于设计阶段,还没有开始生锈;为什么您需要任何其他方式来检查它们?我正在发布描述中的错误。我可能只需要在运行时检查这些,因为我的元素是异构的,并且有一些动态逻辑,例如,处理事件。rust支持检查现有字段或方法吗?元素如何异构?你有
Vec
?是的,这就是我正在使用的——它将traits方法委托给其他方法,比如self.Controller.Method1。我还在设计阶段,还没开始生锈。谢谢你的回答。我以前见过这种情况,但它不适用于完全模块化的设计。希望我不需要在运行时进行检查(例如,如果为某个特定元素创建了新特征,那么所有元素基本上都需要这个“空”特征来进行补偿)@HTDE您确定不想使用枚举吗?另一种选择是提供一个
fn has_my_xyztrait(&self)->选项
,该选项可降级为只有某些元素可能实现的特定特性。这样,您只需按每个特征而不是按每个方法或字段执行此操作。注意:如果库的用户不需要创建新的元素类型,则绝对应该使用枚举。我同意!我试图理解第一条关于贬低某一特定特质的评论。是否有我可以查看的示例或文档?谢谢好啊谢谢你的回答。我以前见过这种情况,但它不适用于完全模块化的设计。希望我不需要在运行时进行检查(例如,如果为某个特定元素创建了新特征,那么所有元素基本上都需要这个“空”特征来进行补偿)@HTDE您确定不想使用枚举吗?另一种选择是提供一个
fn has_my_xyztrait(&self)->选项
,该选项可降级为只有某些元素可能实现的特定特性。这样,您只需按每个特征而不是按每个方法或字段执行此操作。注意:如果库的用户不需要创建新的元素类型,则绝对应该使用枚举。我同意!我试图理解第一条关于贬低某一特定特质的评论。是否有我可以查看的示例或文档?谢谢
if let Some(result) = self.try_my_method() {
    /* ... */
}