Rust 如何处理;该类型未达到所需的使用寿命”;什么时候用? 使用std::any::any; 发布枚举对象类型{ 错误, 功能, } pub特征对象{ fn对象类型(&self)->ObjectType; //需要向下转换特征以指定结构 fn as_any(&self)->&dyn any; } #[导出(调试)] 发布结构函数{ fn对象类型(&self)->ObjectType{ ObjectType::函数 } fn as_any(&self)->&dyn any{ 自己 } }
当我尝试编译上面的代码时,我得到了以下错误。这里是操场的代码Rust 如何处理;该类型未达到所需的使用寿命”;什么时候用? 使用std::any::any; 发布枚举对象类型{ 错误, 功能, } pub特征对象{ fn对象类型(&self)->ObjectType; //需要向下转换特征以指定结构 fn as_any(&self)->&dyn any; } #[导出(调试)] 发布结构函数{ fn对象类型(&self)->ObjectType{ ObjectType::函数 } fn as_any(&self)->&dyn any{ 自己 } },rust,traits,lifetime,Rust,Traits,Lifetime,当我尝试编译上面的代码时,我得到了以下错误。这里是操场的代码 编译操场v0.0.1(/playerd) 错误[E0477]:类型'Function src/lib.rs:21:7 | 21 | impl{ | ^^ 注:……因此,`Function类型的主要问题是Function中定义的as_any方法。如果查看中的any特征定义,您将看到特征的生存期界限为'static。Function中的params字段的生存期为'ach不会像'静态的生命周期那么长。一种解决方案是将参数字段定义
编译操场v0.0.1(/playerd)
错误[E0477]:类型'Function src/lib.rs:21:7
|
21 | impl{
| ^^
注:……因此,`Function类型的主要问题是Function
中定义的as_any
方法。如果查看中的any
特征定义,您将看到特征的生存期界限为'static
。Function
中的params
字段的生存期为'a
ch不会像'静态
的生命周期那么长。一种解决方案是将参数
字段定义为框
,而不是使用引用并定义生命周期,但是如果没有进一步的上下文,很难说。我需要存储引用,因为字符串向量位于另一个数据结构中。我正在工作关于在RUST中建立一个翻译,下面是我试图获得的working@vishpat正如这个答案所说,您不能对具有非静态生存期的类型使用Any
。而不是使用单独的enum
+trait
+Any
来执行多态性。有关更多说明,请参阅。
use std::any::Any;
pub enum ObjectType {
Error,
Function,
}
pub trait Object {
fn obj_type(&self) -> ObjectType;
// Required to downcast a Trait to specify structure
fn as_any(&self) -> &dyn Any;
}
#[derive(Debug)]
pub struct Function<'a> {
params: &'a Box<Vec<Box<String>>>,
}
impl<'a> Object for Function<'a> {
fn obj_type(&self) -> ObjectType {
ObjectType::Function
}
fn as_any(&self) -> &dyn Any {
self
}
}