Articles of rust

Qual è il modo de facto di leggere e scrivere file in Rust 1.x?

Con Rust relativamente nuovo, ho visto troppi modi di leggere e scrivere file. Molti sono frammenti estremamente disordinati che qualcuno ha inventato per il loro blog e il 99% degli esempi che ho trovato (anche su Stack Overflow) provengono da build instabili che non funzionano più. Ora che Rust è stabile, cos’è uno snippet semplice, […]

Perché è necessario aggiungere una durata a un tratto con l’operatore più (Iterator + ‘a) necessario?

Sto applicando una chiusura sull’iteratore e voglio usare stable, quindi voglio restituire un Iterator scatola. Il modo più ovvio per farlo è il seguente: struct Foo; fn into_iterator(myvec: &Vec) -> Box<Iterator> { Box::new(myvec.iter()) } Ciò non riesce perché il verificatore del prestito non può dedurre le vite appropriate. Dopo alcune ricerche, ho trovato il modo […]

Come interrompere l’iterazione e restituire un errore quando Iterator :: map restituisce un risultato :: Err?

Ho una funzione che restituisce un Result : fn find(id: &Id) -> Result { // … } Poi un altro lo usa così: let parent_items: Vec = parent_ids.iter() .map(|id| find(id).unwrap()) .collect(); Come gestisco il caso di errore all’interno di una delle iterazioni della map ? So che potrei usare flat_map e in questo caso i […]

Quando è opportuno utilizzare un tipo associato rispetto a un tipo generico?

In questa domanda , è sorto un problema che poteva essere risolto modificando un tentativo di utilizzare un parametro di tipo generico in un tipo associato. Questo ha spinto la domanda “Perché un tipo associato è più appropriato qui?”, Il che mi ha fatto venir voglia di saperne di più. La RFC che ha introdotto […]

È ansible rendere un tipo solo mobile e non copiabile?

Nota del redattore : questa domanda è stata posta prima di Rust 1.0 e alcune delle asserzioni nella domanda non sono necessariamente vere in Rust 1.0. Alcune risposte sono state aggiornate per affrontare entrambe le versioni. Ho questa struttura struct Triplet { one: i32, two: i32, three: i32, } Se lo passo a una funzione, […]

In che modo esiste un’implementazione conflittuale di `From` quando si utilizza un tipo generico?

Sto cercando di implementare un enum di errore che possa contenere un errore associato a uno dei nostri tratti come questo: trait Storage { type Error; } enum MyError { StorageProblem(S::Error), } Ho anche provato a implementare il tratto From per consentire la costruzione di MyError da un’istanza di un Storage::Error MyError impl From for […]

Perché questo modello di corrispondenza non è raggiungibile quando si utilizzano pattern non letterali?

Il seguente codice ( parco giochi ) let max_column = 7; edge = match current_column { 0 => Edge::Left, max_column => Edge::Right, _ => Edge::NotAnEdge }; risultati nel seguente errore: error[E0001]: unreachable pattern –> :10:9 | 10 | _ => Edge::NotAnEdge | ^ this is an unreachable pattern | note: this pattern matches any value […]

Come posso scambiare un nuovo valore per un campo in un riferimento mutabile a una struttura?

Ho una struttura con un campo: struct A { field: SomeType, } Dato un &mut A , come posso spostare il valore del field e scambiare un nuovo valore? fn foo(a: &mut A) { let mut my_local_var = a.field; a.field = SomeType::new(); // … // do things with my_local_var // some operations may modify the […]

Passando il riferimento personale mutevole al metodo dell’object posseduto

Quella che segue è una semplice simulazione con un campo che è un’area rettangular con due palline rimbalzanti. La struct Field ha un metodo di update , che chiama update su ciascuna delle palle. Le palle, nel loro metodo di update , hanno bisogno di muoversi in base alla loro velocità. Ma devono anche reactjs […]

Come testare l’uguaglianza tra gli oggetti tratto?

Nota del redattore: questo esempio di codice proviene da una versione di Rust precedente alla 1.0 e non è un codice Rust 1.0 valido sintatticamente. Le versioni aggiornate di questo codice producono errori diversi, ma le risposte contengono ancora informazioni preziose. Sembra che non possiamo testare l’uguaglianza nel seguente caso. Perchè è questo? C’è una […]