Memory 为什么?的大小是某些RefCell函数的界限,但不是全部?

Memory 为什么?的大小是某些RefCell函数的界限,但不是全部?,memory,rust,Memory,Rust,我注意到,对于某些函数(borrow、borrow\u state、和borrow\u mut),size是类型参数T的绑定,但是,它不是new或into\u internal的绑定。如果我不能创建一个包含动态大小(RefCell)的RefCell),那么它有什么用呢?支持它的功能是什么。我们可以查看这些测试,以了解预期的使用方式: use std::cell::RefCell; #[test] fn refcell_unsized() { let cell: &RefCell

我注意到,对于某些函数(
borrow
borrow\u state
、和
borrow\u mut
),size是类型参数
T
的绑定,但是,它不是
new
into\u internal
的绑定。如果我不能创建一个包含动态大小(
RefCell
)的
RefCell
),那么它有什么用呢?支持它的功能是什么。我们可以查看这些测试,以了解预期的使用方式:

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);
}
使用std::cell::RefCell;
#[测试]
fn refcell_unsized(){
let cell:&RefCell=&RefCell::new([1,2,3]);
{
设b=&mut*单元格。借用_mut();
b[0]=4;
b[2]=5;
}
让comp:&mut[i32]=&mut[4,2,5];
assert_eq!(&*cell.borrow(),comp);
}

由于编译器需要知道要在堆栈上分配的空间量,因此始终需要一个绑定了
大小的
构造函数。一旦有了它,就可以强制使用动态大小的类型。

是否可以创建
RefCell@Matt一个有趣的问题。我不知道答案,但我鼓励你问一个新问题,如果你认为这个问题提供了有用的上下文,那么就回到这个问题上来。