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