Rust generiske

Rust generiske
Hei rustaceans. For denne vil vi utforske hva som er generiske og hvordan du bruker generiske typer i rustspråket. Generics turer mest nye rustbegynnere, men vi vil gjøre vårt beste for å gjøre det så klart som mulig.

Hvis du er interessert i å utforske flere rustemner, kan du sjekke rustlisten vår for å lære mer.

Parameteren

Når du erklærer generiske typer, finner du parameteren. Det er en brukt til å representere enhver datatype i rust:

Et eksempel på typeparameteren i en funksjon er et vist:

fn my_function()

Ovennevnte definerer en generisk funksjon som tar et argument t av enhver type.

Du kan definere flere generiske parametere ved å skille dem med komma:

fn my_function()

I syntaks ovenfor definerer vi flere generiske parametere, t, u, v. Selv om det ikke er nødvendig, er det vanlig å finne generiske typer fra T og øke alfabetet.

Rust definer generisk struktur

Vi kan definere en generisk struktur som vist i syntaksen nedenfor:

strukturstrukturnavn
// Struct Info

Ta eksemplet, struktur definert nedenfor:

struct mystruct
i: t,
J: U,

fn main ()
La var1 = myStruct
I: 10,
J: "Hei"
;
Println!("X: ", var1.Jeg);
Println!("Y: ", var1.j);

Ovennevnte skaper en generisk struktur med to parametere. Inne i strukturen spesifiserer vi to strukturmedlemmer av type t og u. Siden T og U er generiske typer, kan de være av hvilken som helst type.

Generiske funksjoner

Den samme konstruksjonen kan brukes på funksjoner og metode. Hvis en funksjon tar type, sies det å være en generisk funksjon.

Generisk funksjonsdefinisjon er som vist:

fn func_name()
// Funksjonslogikk

Ta eksemplet med definisjon av generisk funksjon nedenfor:

fn generisk(var: t)
Println!("", var);

fn main ()
generisk ("Hei")

I dette eksemplet har vi en generisk funksjon som tar enhver type og skriver den ut til konsollen. Å kjøre ovennevnte kode vil imidlertid føre til en feil.

Siden vi bruker en generisk parameter, må vi implementere displayet eller feilsøkingsegenskapen for å skrive ut den. Vi kan avgrense koden som:

Bruk std :: fmt :: debug;
fn generisk(var: t)
Println!(":? ", var);

fn main ()
generisk ("Hei")

I dette tilfellet importerer vi feilsøkingstrekket og bruker den til den generiske typen. Vi kan deretter skrive ut verdien ved hjelp av feilsøkingsplassen: :?

Det samme tilfellet gjelder hvis en funksjon trenger å utføre noen form for drift. Ta eksempelfunksjonen nedenfor som returnerer 0 hvis en verdi er jevn og 1 hvis annet.

FN EVEN_ODD (var: t) -> i32
Hvis var % 2 == 0
retur 0;
annet
retur 1;

Hvis vi kaller funksjonen ovenfor, vil den returnere en feil. Vi må implementere REM -egenskapen for at den skal fungere som:

Bruk std :: ops :: rem;
Bruk std :: CMP :: EQ;
FN EVEN_ODD + Eq> (var: t) -> i32

REM- og EQ -egenskapene lar deg bruke resten av operatøren og utføre logisk sammenligning.

Konklusjon

I denne artikkelen undersøkte vi grunnleggende om å jobbe med generiske typer i rustspråket. Sjekk dokumentene for å lære mer.