Rust generici

Rust generici
Ciao Rustacei. Per questo, esploreremo ciò che sono generici e come usare i tipi generici nel linguaggio ruggine. Generics viaggi la maggior parte dei nuovi principianti della ruggine, ma faremo il nostro meglio per renderlo il più chiaro possibile.

Se sei interessato a esplorare più argomenti di ruggine, controlla la nostra lista di ruggine per saperne di più.

Il parametro

Quando si dichiara tipi generici, troverai il parametro. È usato per rappresentare qualsiasi tipo di dati in ruggine:

Un esempio del parametro di tipo in una funzione è un mostrato:

fn my_function()

Quanto sopra definisce una funzione generica che prende un argomento t di qualsiasi tipo.

È possibile definire più parametri generici separandoli con le virgole:

fn my_function()

Nella sintassi sopra, definiamo più parametri generici, t, u, v. Sebbene non richiesto, è comune trovare tipi generici a partire da T e incrementare l'alfabeto.

Rust Defining Generic Struct

Possiamo definire una struttura generica come mostrato nella sintassi seguente:

struct structname
// Informazioni sugli strumenti

Prendi l'esempio, struct definito di seguito:

Strutture Mystruct
Esso,
J: u,

fn main ()
let var1 = mystruct
I: 10,
J: "Ciao"
;
println!("X: ", var1.io);
println!("Y: ", var1.J);

Quanto sopra crea una struttura generica con due parametri. All'interno della struttura, specifichiamo due membri della struttura di tipo T e u. Poiché T e U sono tipi generici, possono essere di qualsiasi tipo.

Funzioni generiche

Lo stesso costrutto può essere applicato alle funzioni e al metodo. Se una funzione prende il tipo, si dice che sia una funzione generica.

La definizione della funzione generica è come mostrato:

fn func_name()
// Logica della funzione

Prendi l'esempio della definizione della funzione generica di seguito:

fn generico(var: t)
println!("", var);

fn main ()
generico ("ciao")

In questo esempio, abbiamo una funzione generica che prende qualsiasi tipo e la stampa alla console. Tuttavia, l'esecuzione del codice sopra causerà un errore.

Dal momento che stiamo usando un parametro generico, dobbiamo implementare il tratto di visualizzazione o debug per stamparlo. Possiamo perfezionare il codice come:

Usa std :: fmt :: debug;
fn generico(var: t)
println!(":? ", var);

fn main ()
generico ("ciao")

In questo caso, importiamo il tratto di debug e lo utilizziamo per il tipo generico. Possiamo quindi stampare il valore usando il segnaposto del tratto di debug: :?

Lo stesso caso si applica se una funzione deve eseguire qualsiasi tipo di operazione. Prendi la funzione di esempio di seguito che restituisce 0 se un valore è uniforme e 1 se altrimenti.

fn even_odd (var: t) -> i32
Se var % 2 == 0
restituzione 0;
altro
Ritorno 1;

Se chiamiamo la funzione sopra, restituirà un errore. Dobbiamo implementare il tratto REM affinché funzioni come:

Usa std :: ops :: rem;
Usa std :: cmp :: eq;
fn even_odd + Eq> (var: t) -> i32

I tratti REM e EQ consentono di utilizzare l'operatore rimanente ed eseguire un confronto logico.

Conclusione

In questo articolo, abbiamo esplorato i fondamenti del lavoro con tipi generici nel linguaggio ruggine. Controlla i documenti per saperne di più.