是否有可能在锈蚀中创建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
}这让我相信(以及这问题的答案)这样的事情是可能的。我也试过:
fn test1<T : Any>(x : T) -> Box<Any>{
return Box::new(x) as Box<Any>
}效果很好。Box和RefCell似乎都有相似的界限,所以我不太确定我在这里遗漏了什么。任何帮助都将不胜感激。如果这有帮助的话,我在铁锈游乐场中也有这个。
发布于 2016-02-10 00:55:03
Box具有std::ops::CoerceUnsized的特性,它允许转换为Box<Any>。RefCell没有,所以你不能。
你当然可以这样做:
let x = RefCell::new( String::new() );
let x = &x as &RefCell<Any>;因此,您可以拥有一个RefCell<Any>,但不能构造一个或强制一个,只能强制引用。
发布于 2016-02-10 00:44:59
RefCell<Any>是一个不大小的类型;您不能拥有一个非大小类型的实际实例--它将占用多少堆栈空间?这与不能返回Any但必须返回Box<Any>的方式相同;同样,您也不能返回RefCell<Any>,但必须返回类似Rc<RefCell<Any>>的内容。像RefCell<Box<Any>>这样的系统也会工作得很好,因为大小类型的RefCell本身就是大小的。
https://stackoverflow.com/questions/35304663
复制相似问题