ho notato che ?Sized
è un limite al parametro di tipo T
per alcune funzioni (borrow
, borrow_state
e borrow_mut
), tuttavia, è non un balzo per new
o into_inner
. Se non riesco a creare un RefCell
contenente qualcosa di dimensioni dinamiche (RefCell<T : ?Sized>
), allora a che serve avere funzioni che possano funzionare su una cosa del genere?Perché è stato dimensionato un limite per alcune funzioni RefCell, ma non tutte?
5
A
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.
Problemi correlati
- 1. Spaziatura tra alcune sottotrame ma non tutte
- 2. Perché constexpr non è l'impostazione predefinita per tutte le funzioni?
- 3. Come possiamo verificare se la nostra app è installata per alcune organizzazioni ma non tutte?
- 4. Autenticazione Laravel 4. Limita l'accesso ad alcune funzioni di una risorsa ma non tutte
- 5. In gdb, posso chiamare alcune funzioni di classe, ma altre "non possono essere risolte". Perché?
- 6. jQuery ottenere alcune classi, ma non altri
- 7. C++: nascondendo alcune funzioni
- 8. "Job for [email protected] non riuscito perché è stato superato un limite di risorse configurato"
- 9. Implementazione del tratto dimensionato
- 10. Perché alcune funzioni di Python hanno solo il passaggio?
- 11. Xdebug è stato caricato correttamente in Ubuntu ma var_dump/gestione degli errori non è stato sovraccaricato
- 12. Android ImageView dimensionato per peso non centrato su LinearLayout principale
- 13. lattina delega alcune classi, ma non altri
- 14. Impostazione di un tipo di accessorio UITableViewCell su alcune celle, ma non tutte
- 15. La richiesta è stata rifiutata perché non è stato trovato alcun limite multipart in springboot
- 16. UIPopoverController non dimensionato correttamente in iOS 8
- 17. Hive UDF per la selezione di tutte tranne alcune colonne
- 18. Perché HttpGet è richiesto solo per alcune azioni?
- 19. Non è stato migliorato ma è superClass [class play.db.ebean.Model] è?
- 20. Task non è riuscita perché Al.exe non è stato trovato,
- 21. Perché è illegale per le funzioni non basate su modelli avere lo stesso nome e argomenti ma tipi di ritorno diversi? (Ma legale per le funzioni del modello?)
- 22. Perché questo codice rientra, ma non è thread-safe
- 23. Mercurial: alcune domande tutte relative a .hgignore
- 24. Elenco Databind di oggetti per un DataGridView WinForms, ma non per mostrare alcune proprietà pubbliche
- 25. Perché ViewForAnnotation non è stato chiamato?
- 26. Trovare gli elementi che si verificano in alcune ma non tutte le liste
- 27. Perché alcune funzioni di OCaml assumono() come parametro?
- 28. Perché getservletcontext non è stato trovato?
- 29. Perché alcune richieste JSON tra domini falliscono ma altre no?
- 30. Limite di velocità per l'API di google maps, ma non so perché
È 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
@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