是否可以在Rust中创建RefCell<Any>类型的东西?我尝试了以下方法:

fn test2<T : Any>(x : T) -> RefCell<Any>{
    return RefCell::new(x) as RefCell<Any>
}

但我收到以下错误:
error: the trait `core::marker::Sized` is not implemented for the type `core::any::Any + 'static` [E0277]
<anon>:8 fn test2<T : Any>(x : T) -> RefCell<Any>{
RefCell的文档包括以下内容
pub struct RefCell<T> where T: ?Sized {
    // some fields omitted
}

这使我相信(连同this问题的答案一起)这样的事情是可能的。我也尝试过:
fn test1<T : Any>(x : T) -> Box<Any>{
    return Box::new(x) as Box<Any>
}

效果很好。 BoxRefCell似乎都有相似的界限,所以我不太确定我在这里缺少什么。任何帮助将非常感激。如果有帮助,我将它放在Rust Playground中。

最佳答案

Box具有std::ops::CoerceUnsized特性,可以转换为Box<Any>RefCell不能,所以您不能。

当然,您可以这样做:

let x = RefCell::new( String::new() );
let x = &x as &RefCell<Any>;

因此,您可以使用RefCell<Any>,但不能构造一个或强制转换为一个,仅强制转换为引用。

关于rust - 是否可以创建RefCell <Any>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35304663/

10-12 01:40