是否可以在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>
}
效果很好。
Box
和RefCell
似乎都有相似的界限,所以我不太确定我在这里缺少什么。任何帮助将非常感激。如果有帮助,我将它放在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/