Enumite ja mustrite sobitamise mõistmine on Rustis põhiline. Uurige nende mõlema rakendamiseks tõhusaid tehnikaid.
Rust pakub toimingute tegemiseks erinevaid andmetüüpe alates põhiandmetüüpidest, nagu stringid, täisarvud ja ujuvad punktnumbrid liitandmetüüpidele (nt vektorid ja massiivid) liitandmetüüpidele (nt struktuurid ja loendid).
Enums (loendused) on andmetüüp, mis võimaldab esitada fikseeritud väärtuste komplekti, nagu nädalapäevad ja vikerkaare värv. Enum on mugav, kui muutuja võimalikud väärtused on piiratud ja teada.
Enumite määratlemine roostes
Enumite deklareerimine roostes on sarnane enumite deklareerimine C# keeles. Sa kasutad enum nimele järgnev märksõna ja lokkis sulgude komplekt loenduste määratlemiseks. Võimalikud variandid (olemid) saate määrata lokkis sulgudes, kasutades eraldajana koma.
Siin on loetelu nädalapäevade kohta:
enumNädalapäev {
esmaspäev,
teisipäeval,
kolmapäeval,
neljapäeval,
reedel,
laupäeval,
pühapäeval,
}
The Nädalapäev enum tähistab nädalapäevi. The variandid
on päeva nimed ja neil pole seotud väärtusi. Samuti võivad teie enumi variandid olla mis tahes Rooste andmetüüp.Variantidele pääsete juurde, määrates variandi nime, kasutades loendis tee eraldaja (::) operaatorit.
lase päev = nädalapäev:: esmaspäev;
// muutuja "day" staatiliselt sisestatud versioon
lase päev: nädalapäev = nädalapäev:: esmaspäev;
Kood määrab, et soovite juurdepääsu esmaspäev nädalapäevade loendi variant.
Enumi variandid ja diskriminandid
Enemi variandid on seotud täisarvuliste väärtustega, mida nimetatakse diskrimineeriv. Vaikimisi algavad diskrimineerivad väärtused nullist ja järgnevate variantide puhul suurendatakse neid 1 võrra; iga variandi jaoks on siiski võimalik määrata kohandatud diskrimineerivad väärtused.
Siin on väärtus määratud variantidega tööpäevade loendi näide.
enumNädalapäev {
Esmaspäev = 1,
teisipäev = 2,
kolmapäev = 3,
neljapäev = 4,
reede = 5,
laupäev = 6,
pühapäev = 7,
}
Nädalapäevade loendil on seitse varianti, mis esindavad iga nädalapäeva, ja igale päevale on määratud väärtus (nimetatakse diskriminandiks). Variandid on järjekorras nädala esimesest viimase päevani.
Diskrimineerivale väärtusele pääsete juurde variandi nime kasutades.
fnpeamine() {
println!("Esmaspäev: {}", nädalapäev:: esmaspäev nagui32);
println!("Teisipäev: {}", Nädalapäev:: Teisipäev nagui32);
println!("Kolmapäev: {}", Nädalapäev:: Kolmapäev nagui32);
println!("Neljapäev: {}", Nädalapäev:: Neljapäev nagui32);
println!("Reede: {}", nädalapäev:: reede nagui32);
println!("Laupäev: {}", Nädalapäev:: Laupäev nagui32);
println!("Pühapäev: {}", nädalapäev:: pühapäev nagui32);
}
The println! makrot kasutatakse diskriminantide printimiseks. Iga trükis! makro kutsumisel on kaks argumenti: vormingustring ja väärtus. Vormingutring määrab, kuidas väljundit vormindada; väärtus on tegelik väärtus, mis prinditakse.
Sel juhul on vormingu string stringliteraal, mis sisaldab nädalapäeva nime, ja väärtus on loendi variant koos selgesõnalise ülekandega i32 täisarvu tüüp.
Eksplitsiitne ülekandmine i32-sse on vajalik, kuna Rusti loendid on esitatud täisarvudena, kuid konkreetne täisarvu tüüp sõltub loendi suurusest. Vaikimisi määrab Rust väikseima täisarvu tüübi, mis suudab esindada kõiki loendis olevaid diskriminante. Kuid sel juhul soovite väärtused printida i32 täisarvudena, nii et peate need selgesõnaliselt üle kandma.
Siin on rakenduse käivitamise tulemus peamine funktsioon:
Mustrid sobivad roostes
Mustri sobitamine on rooste juhtimisstruktuuri konstruktsioon, mis on kasulik andmemustrite tuvastamiseks. Mustri sobitamine võimaldab kirjutada sisutihedat ja tõhusat koodi täiustatud andmestruktuurid või keeruliste toimingute tegemine.
Sa kasutad vaste märksõna, millele järgneb => vastavalt mustri eraldaja ja mustri operatsioon. Muster võib olla mis tahes Rusti avaldis, sealhulgas literaalid, muutujad ja funktsioonikutsed.
Siin on vaste avalduse näide:
fnpeamine(){
lase x = 5;
vaste x {
1 => println!("üks"),
2 => println!("kaks"),
3 => println!("kolm"),
// töötab, kui ükski muster ei ühti
_ => println!("midagi muud"),
}
}
The peamine funktsioon sobib x mitme mustri vastu ja prindib seejärel väärtuse x väärtuse põhjal. Alakriipsu (_) muster on metsikkaardi muster, mida kasutatakse kõikehõlmava juhtumi puhul, mida otseselt ei käsitleta.
Enumsid ja mustrite sobitamine
Enumid ja mustrite sobitamine on kasulikud täpsemate andmestruktuuride väljendamiseks ja nendega töötamiseks tüübikindlal ja tõhusal viisil. Enumide abil saate määratleda fikseeritud väärtuste komplekti ja nende väärtustega töötamiseks mustri sobitamise.
Siin on vikerkaarevärvide loend:
enumVikerkaar {
punane,
oranž,
kollane,
roheline,
sinine,
Indigo,
Violetne,
}
Iga varianti Vikerkaar enum tähistab vikerkaarevärvi. Saate kasutada mustrite sobitamist vastelausega, et sobitada mustrid variandiga, et juhtida programmi voogu vikerkaarevärvi alusel.
Siin on funktsioon, mis võtab värvivariandi Vikerkaare loendist ja prindib värvi põhjal teate.
fnprint_color(värv: vikerkaar) {
vaste värv {
Vikerkaar:: Punane => println!("Värv on punane!"),
Vikerkaar:: Oranž => println!("Värv on oranž!"),
Vikerkaar:: Kollane => println!("Värv on kollane!"),
Vikerkaar:: Roheline => println!("Värv on roheline!"),
Vikerkaar:: Sinine => println!("Värv on sinine!"),
Vikerkaar:: Indigo => println!("Värv on indigo!"),
Vikerkaar:: Violetne => println!("Värv on violetne!"),
}
}
fnpeamine() {
lase värv = Vikerkaar:: Sinine;
print_color (värv);
}
Sa võid saada variante ei konstrueerita kunagi või sarnaseid hoiatusi, kui proovite ülaltoodud koodi käivitada, kuna teisi variante peale sinise variandi pole selles koodis kunagi koostatud. Seega võite antud juhul neid hoiatusi ohutult ignoreerida, kuna see on tahtlik.
The print_color funktsioon võtab Rainbow enum tüüpi värviparameetri. Vasteteade ühtib värvide komplekti värviga, millele pääseb juurde variantide nimede kaudu. Ja lõpuks trükitakse sõnum sobitatud värvi alusel.
Mustri sobitamist saate kasutada keeruliste toimingute jaoks, nagu mitu tingimusel põhinevat tagastusväärtust.
fnarvuta_lainepikkus(värv: Vikerkaar) -> u32 {
vaste värv {
Vikerkaar:: Punane => 700,
Vikerkaar:: Oranž => 590,
Vikerkaar:: Kollane => 570,
Vikerkaar:: Roheline => 510,
Vikerkaar:: Sinine => 475,
Vikerkaar:: Indigo => 445,
Vikerkaar:: Violetne => 400,
}
}
The arvuta_lainepikkus Funktsioon võtab parameetrina tüübi Rainbow enum värvivariandi ja tagastab märgita 32-bitise täisarvu, mis on mustrile vastava värvi lainepikkus.
Rooste pakub ka struktuure kohandatud tüüpide loomiseks
Enumsid on mugavad mitme toimingu jaoks kohandatud tüüpide määratlemiseks, eriti juhtudel, kui väljad on teada ja kindlad.
Rust pakub ka struktuure, mida saate kasutada nimeliste väljadega kohandatud tüüpide loomiseks. Erinevalt enumitest võimaldavad struktuurid määratleda erinevat tüüpi välju, millele pääsete juurde ja mida saate eraldi muuta.