如何从函数中返回Any?

时间:2016-10-11 12:07:40

标签: rust typing

我正在为数据库项目开发类型系统。一个问题是将类型id映射到给定类型id和地址的读取器,函数可以返回给定内置u32String的任何数据类型到定义的结构。

我对作家没有任何问题,比如这样的宏

    fn set_val (data: &Any, id:i32, mem_ptr: usize) {
         match id {
             $(
                 $id => $io::write(*data.downcast_ref::<$t>().unwrap(), mem_ptr),
             )*
             _ => (),
         }
    }

但是对于读者来说Any似乎不适合用作返回值,因为the trait bound "std::any::Any + 'static: std::marker::Sized" is not satisfied。我也试图作为参考返回,但我被困在一生

    fn get_val (id:i32, mem_ptr: usize) -> Option<& Any> {
         match id {
             $(
                 $id => Some(&$io::read(mem_ptr)),
             )*
             _ => None,
         }
    }

抱怨missing lifetime specifier。如果'static因为返回值不够活跃而无法在这里工作,我该如何在此处指定生命周期?

PS。 $ io的read函数返回任何类型的类型。

1 个答案:

答案 0 :(得分:7)

Any是一个特征,这意味着它是未分级的,因此不能由函数返回。

但是,你可以尝试装箱:

fn get_val (id:i32, mem_ptr: usize) -> Option<Box<Any>> {
     match id {
         $(
             $id => Some(Box::new($io::read(mem_ptr))),
         )*
         _ => None,
     }
}

示例playpen