首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以创建一个RefCell<Any>吗?

可以创建一个RefCell<Any>吗?
EN

Stack Overflow用户
提问于 2016-02-10 00:13:17
回答 2查看 428关注 0票数 5

是否有可能在锈蚀中创建RefCell<Any>类型的东西?我尝试了以下几点:

代码语言:javascript
复制
fn test2<T : Any>(x : T) -> RefCell<Any>{
    return RefCell::new(x) as RefCell<Any>
}

但我得到了以下错误:

代码语言:javascript
复制
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的文档包括以下内容

代码语言:javascript
复制
pub struct RefCell<T> where T: ?Sized {
    // some fields omitted
}

这让我相信(以及问题的答案)这样的事情是可能的。我也试过:

代码语言:javascript
复制
fn test1<T : Any>(x : T) -> Box<Any>{
    return Box::new(x) as Box<Any>
}

效果很好。BoxRefCell似乎都有相似的界限,所以我不太确定我在这里遗漏了什么。任何帮助都将不胜感激。如果这有帮助的话,我在铁锈游乐场中也有这个。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-10 00:55:03

Box具有std::ops::CoerceUnsized的特性,它允许转换为Box<Any>RefCell没有,所以你不能。

你当然可以这样做:

代码语言:javascript
复制
let x = RefCell::new( String::new() );
let x = &x as &RefCell<Any>;

因此,您可以拥有一个RefCell<Any>,但不能构造一个或强制一个,只能强制引用。

票数 6
EN

Stack Overflow用户

发布于 2016-02-10 00:44:59

RefCell<Any>是一个不大小的类型;您不能拥有一个非大小类型的实际实例--它将占用多少堆栈空间?这与不能返回Any但必须返回Box<Any>的方式相同;同样,您也不能返回RefCell<Any>,但必须返回类似Rc<RefCell<Any>>的内容。像RefCell<Box<Any>>这样的系统也会工作得很好,因为大小类型的RefCell本身就是大小的。

游行示威。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35304663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档