为什么?确定某些RefCell功能的界限,但不是全部?

时间:2016-02-08 20:33:02

标签: memory rust

我注意到?Sized是某些函数(Tborrowborrow_state)的类型参数borrow_mut的约束,但是,它newinto_inner的界限。如果我无法创建包含动态大小(RefCell)的内容的RefCell<T : ?Sized>,那么它具有哪些功能可以在这样的事情上运行呢?

1 个答案:

答案 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的构造函数,因为编译器需要知道要在堆栈上分配的空间量。完成后,您可以强制转换为动态大小的类型。