我注意到?Sized
是某些函数(T
,borrow
和borrow_state
)的类型参数borrow_mut
的约束,但是,它不是new
或into_inner
的界限。如果我无法创建包含动态大小(RefCell
)的内容的RefCell<T : ?Sized>
,那么它具有哪些功能可以在这样的事情上运行呢?
答案 0 :(得分:4)
该支持是added in a commit that also added tests。我们可以查看这些测试,看看它是如何使用的:
use std::cell::RefCell;
#[test]
fn refcell_unsized() {
let cell: &RefCell<[i32]> = &RefCell::new([1, 2, 3]);
{
let b = &mut *cell.borrow_mut();
b[0] = 4;
b[2] = 5;
}
let comp: &mut [i32] = &mut [4, 2, 5];
assert_eq!(&*cell.borrow(), comp);
}
您始终需要一个绑定Sized
的构造函数,因为编译器需要知道要在堆栈上分配的空间量。完成后,您可以强制转换为动态大小的类型。