Articles of rust

Quando una chiusura implementa Fn, FnMut e FnOnce?

Quali sono le condizioni specifiche per una chiusura per implementare i tratti Fn , FnMut e FnOnce ? Questo è: Quando una chiusura non implementa il tratto FnOnce ? Quando una chiusura non implementa il tratto FnMut ? Quando una chiusura non implementa il tratto Fn ? Ad esempio, la modifica dello stato della chiusura […]

Sono permesse le variabili polimorfiche?

Ho varie strutture che implementano tutte la stessa caratteristica. Voglio aggirarmi su alcune condizioni, decidendo in fase di esecuzione quale di quelle strutture di istanziare. Quindi, indipendentemente dal ramo che ho seguito, voglio chiamare i metodi da quella caratteristica. Questo è ansible in Rust? Spero di ottenere qualcosa di simile al seguente (che non viene […]

Problemi a vita che condividono riferimenti tra thread

Ho una discussione che avvia thread di lavoro, ci si aspetta che tutti vivano per sempre. Ogni thread di lavoro mantiene la propria lista di Socket . Alcune operazioni richiedono che io attraversi tutte le prese attualmente in vita, ma ho problemi con le durate che provano a creare un elenco principale di socket contenenti […]

Prendere in prestito mutuamente un campo struct mentre si prende in prestito un altro in una chiusura

Ho una struttura contenente due campi e voglio modificare un campo (mutable mutable) usando un altro campo (mutuo immutabile), ma ottengo un errore dal controllore del prestito. Ad esempio, il seguente codice: struct Struct { field1: Vec, field2: Vec, } fn main() { let mut strct = Struct { field1: vec![1, 2, 3], field2: vec![2, […]

Qual è il tipo di ritorno dell’operazione di indicizzazione?

Sto provando, senza successo, a giocare con le fette. Ho ridotto il mio primo numero a: fn at(slice: &’a [T], index: usize) -> &’a T { let item = slice[index]; item } Mi aspetto che il tipo di ritorno di slice[index] sia un riferimento, data la documentazione : pub trait Index { type Output; fn […]

Non è ansible spostarsi da contenuti presi in prestito quando si scartano

Questo è il codice che sto cercando di eseguire: fn my_fn(arg1: &Option<Box>) -> (i32) { if arg1.is_none() { return 0; } let integer = arg1.unwrap(); *integer } fn main() { let integer = 42; my_fn(&Some(Box::new(integer))); } ( nel parco giochi Rust ) Ottengo il seguente errore: error[E0507]: cannot move out of borrowed content –> src/main.rs:5:19 […]

Vettore di oggetti appartenenti a un tratto

Considera il seguente codice: trait Animal { fn make_sound(&self) -> String; } struct Cat; impl Animal for Cat { fn make_sound(&self) -> String { “meow”.to_string() } } struct Dog; impl Animal for Dog { fn make_sound(&self) -> String { “woof”.to_string() } } fn main () { let dog: Dog = Dog; let cat: Cat = […]

Imansible spostarsi da contenuti presi in prestito

Non capisco che l’errore cannot move out of borrowed content . L’ho ricevuto molte volte e l’ho sempre risolto, ma non ho mai capito perché. Per esempio: for line in self.xslg_file.iter() { self.buffer.clear(); for current_char in line.into_bytes().iter() { self.buffer.push(*current_char as char); } println!(“{}”, line); } produce l’errore: error[E0507]: cannot move out of borrowed content –> […]

Come posso prendere in prestito un RefCell , trovare una chiave e restituire un riferimento al risultato?

Ho un RefCell e voglio prendere in prestito la tabella, trovare una chiave e restituire un riferimento al risultato: use std::cell::RefCell; use std::collections::HashMap; struct Frame { map: RefCell<HashMap>, } impl Frame { fn new() -> Frame { Frame { map: RefCell::new(HashMap::new()), } } fn lookup(&’a self, k: &String) -> Option { self.map.borrow().get(k) } } fn […]

Quali sono le opzioni per porre fine a un prestito mutabile in Rust?

Sto lottando con il controllore del prestito – mi chiedo meraviglia. Mentre ho trovato una soluzione aggiungendo una chiusura, sono curioso di sapere se ci sono altri modi per terminare un mutuo mutabile in modo che la prossima affermazione possa accedere a un’associazione successiva. Ecco cosa ho fatto finora: let mut canvas: Canvas = Canvas […]