I denne artikkelen vil vi utforske hvordan vi skal jobbe med enums i rustprogrammeringsspråket.
Definere en enum
La oss vurdere et eksempel der vi kan bruke en enum -type. For eksempel, hvis vi trenger å lagre veibeskrivelse, kan vi bruke en enum. Vanligvis kan vi uttrykke retning i fire store mulige verdier: Nordøst, sør og vest.
Hvis vi vurderer retningen, kan et kjøretøy enten bevege seg i en av alle mulige retninger, men ikke mer en gang samtidig.
Dette gjør en enum tungt passende for en slik struktur.
For å erklære en enum i rust, starter vi med nøkkelordet enum, etterfulgt av Enum -identifikatoren. Et eksempel er gitt nedenfor:
enum retning
Nord,
Øst,
Sør,
Vest
Det forrige eksemplet lar oss definere en tilpasset type type retning som vi kan gjenbruke i programmet.
Du kan også definere en enum med en variant uten data knyttet til den, lik en enhetslignende struktur. En enum kan også ha varianter med navngitte data og ikke navngitte data.
Et eksempel er som vist:
enum person
I live,
Hann (streng, f64),
Kvinne Navn: Streng, alder: I32
Enums er nyttige når du oppretter en type som vist i forrige eksempel. Hvis vi skulle bruke strukturdefinisjon, måtte vi lage flere strukturer. Enums lar oss lagre alle variantene under en enkelt enhet.
Enumverdier
Etter å ha erklært en enum, kan vi opprette en forekomst av en enum ved å bruke de mulige variantene som er tilgjengelige i typen.
For eksempel:
fn main ()
La n = retning :: nord;
La e = retning :: øst;
La s = retning :: sør;
La w = retning :: vest;
For å få tilgang til varianten av en enum, bruker vi den doble tykktarmen for å skille variantnavnet og dens identifikator.
Match over Enums
En større bruk av enums er mønstermatching. Hvis du har flere potensielle kamper i programmet ditt, kan det hende at alternativet for en IF-Else-blokk ikke oppretter en lesbar kode. For et slikt scenario kan vi bruke enums med kampoperatøren.
Matchoperatøren lar oss sammenligne en verdi mot en liste over mønstre, for eksempel variabelnavn, bokstavelige verdier og enumvarianter.
Tenk på følgende eksempel på instruksjonene som vi har opprettet tidligere:
fn main ()
La retning: retning = retning :: nord;
Match retning
Retning :: nord =>
Println!("Retning er nord");
,
Retning :: øst =>
Println!("Retning er øst");
,
Retning :: sør =>
Println!("Retning er sør");
,
Retning :: West =>
Println!("Retning er vest");
I det forrige eksemplet starter vi med matchordet etterfulgt av uttrykket vi ønsker å evaluere. Selv om syntaksen kan virke lik en IF -uttalelse, gir ikke kamputtrykket en boolsk sann eller usant. Returtypen kan være av hvilken som helst type. I vårt tilfelle er returtypen en retning.
Neste blokk er kjent som en matcharm. En arm inneholder mønsteret for å matche og kodeblokken for å utføre hvis kampen er funnet.
I vårt eksempel inneholder den første armen mønsteret :: Nord og => operatøren. Dette åpner blokken for at koden skal utføres når kampen blir funnet. For det forrige eksemplet skriver vi ut meldingen for samsvarende retning.
Kompilatoren vil evaluere kamputtrykket og sammenligne for et matchende mønster i de medfølgende armene. Hvis en kamp blir funnet i en bestemt arm, blir koden i armblokken utført. Ellers fortsetter kompilatoren med evalueringen.
Vi kan kjøre forrige kode som følger:
rustc enums.Rs
./enums
Den forrige koden skal returnere som følger:
$ ./enums
Retningen er nord
_ Plassholderen
Anta at vi bare vil utføre spesifikke funksjoner for bestemte mønstre i en enum. Så gjør en felles handling for alle andre.
For et slikt tilfelle kan vi bruke _-operatøren, som samsvarer med alle andre ikke-spesifiserte tilfeller i et kamputtrykk.
La oss ta instruksjonene enum vi opprettet tidligere. Vi kan definere en handling hvis retningen er nord, og hvis ikke, kjører vi en global melding for alle andre tilfeller. Den resulterende koden er som vist nedenfor:
fn main ()
La retning: retning = retning :: nord;
Match retning
Retning :: nord =>
Println!(“Retning er nord”);
,
_ =>
Println!(“Annen retning”)
Hvis vi endrer verdien av "retning", bør vi få følgende utgang som:
La retning: retning = retning :: øst;
$ Cargo Run
Annen retning
Koden inne i _ -blokken utføres siden vi definerte ingen matchende sak for retning østover.
Null variant enums
Vi kan også lage en enum uten varianter. Disse er kjent som null-variant enums, og vi kan ikke instantisere dem.
Et eksempel på null-variant Enums er gitt nedenfor:
enum nullenum
Vi kan ikke kaste null variant enums til andre typer.
Konklusjon
I denne artikkelen undersøkte vi det grunnleggende om å jobbe med enumtyper i rustprogrammeringsspråket. Vi fremhevet hvordan vi skal jobbe med enums i rust, som inkluderer definisjonen av en enum, bruk av enumverdier og hvordan man matcher over enums. Vi håper du fant denne artikkelen nyttig. Sjekk de andre Linux -hint -artiklene for flere tips og informasjon.