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

Mat*_*att 5 memory rust

我注意到,?Sized是在类型参数绑定T某些功能(borrow,borrow_state,和borrow_mut),但是,它是不是一个界newinto_inner.如果我不能创建一个RefCell包含动态大小(RefCell<T : ?Sized>)的东西,那么它具有可以在这样的东西上运行的函数有什么用呢?

She*_*ter 4

该支持是在还添加了测试的提交中添加的。我们可以查看这些测试来了解它的预期用途:

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);
}
Run Code Online (Sandbox Code Playgroud)

您始终需要有一个带有Sized界限的构造函数,因为编译器需要知道要在堆栈上分配的空间量。一旦你有了它,你就可以强制转换为动态大小的类型。