2016-02-08 9 views

risposta

4

Tale supporto era added in a commit that also added tests. Siamo in grado di guardare a quei test per vedere come ci si aspettava di essere utilizzato:

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); 
} 

è sempre necessario avere un costruttore con una Sized vincolati come il compilatore ha bisogno di conoscere la quantità di spazio per allocare sullo stack. Una volta che hai, puoi quindi costringere a un tipo di dimensioni dinamiche.

+0

È possibile creare un 'RefCell '? Ho provato 'RefCell :: new (x) as RefCell ', tuttavia, ho ricevuto un errore che diceva che 'Sized' non è implementato per' Any'. D'altra parte, 'Box :: new (x) come Box ' funziona bene. Sembrano avere restrizioni simili a quelle di "dimensioni". Cosa mi manca? https://play.rust-lang.org/?gist=5af8c51ac91d162d999f&version=stable – Matt

+0

@Matt una domanda interessante. Non conosco la risposta, ma ti incoraggio a fare una nuova domanda, ricollegando a questa domanda se ritieni che fornisca un contesto utile. – Shepmaster

Problemi correlati