Rust labai svarbu suprasti enumus ir modelių derinimą. Ištirkite efektyvius būdus, kaip juos abu įgyvendinti.

„Rust“ teikia įvairius duomenų tipus operacijoms atlikti – nuo ​​pagrindinių duomenų tipų, pvz., eilučių, sveikųjų skaičių ir slankiųjų. taškiniai numeriai prie sudėtinių duomenų tipų, pvz., vektorių ir masyvų, iki sudėtinių duomenų tipų, pvz., struktūrų ir sąrašų.

Enums (išvardinimai) yra duomenų tipas, leidžiantis pateikti fiksuotą reikšmių rinkinį, pvz., savaitės dienas ir vaivorykštės spalvą. Enums yra patogu, kai galimos kintamojo reikšmės yra ribotos ir žinomos.

Enums apibrėžimas rūdyje

Enums deklaravimas rūdyje yra panašus į enums deklaravimas C#. Jūs naudosite enum po pavadinimo esantis raktinis žodis ir riestiniai skliaustai, kad apibrėžtų sąrašus. Galite apibrėžti galimus variantus (objektus) riestiniuose skliaustuose naudodami kablelį kaip skyriklį.

Štai savaitės dienų sąrašas:

enumSavaitės diena {
pirmadienis,
antradienis,
trečiadienį,
ketvirtadienis,
penktadienis,
šeštadienis,
sekmadienis,
}
instagram viewer

The Savaitės diena enum reiškia savaitės dienas. The variantai yra dienos pavadinimai ir neturi susijusių reikšmių. Be to, jūsų enum variantai gali būti bet kokie Rūdžių duomenų tipas.

Galite pasiekti variantus nurodydami varianto pavadinimą naudodami kelio skyriklio (::) operatorių sąraše.

leisti diena = Savaitės diena:: Pirmadienis;

// statiškai įvesta kintamojo "day" versija
leisti diena: Savaitės diena = Savaitės diena:: Pirmadienis;

Kodas nurodo, kad norite pasiekti Pirmadienis savaitės dienų sąrašo variantas.

Enumo variantai ir diskriminatoriai

Enum variantai yra susieti su sveikųjų skaičių reikšmėmis, vadinamomis diskriminuojantis. Pagal numatytuosius nustatymus diskriminuojančios reikšmės prasideda nuo nulio, o paskesniems variantams padidinamos 1; tačiau kiekvienam variantui galima nurodyti tinkintas diskriminacines vertes.

Štai savaitės dienų sąrašo pavyzdys su priskirtais variantais.

enumSavaitės diena {
Pirmadienis = 1,
antradienis = 2,
Trečiadienis = 3,
Ketvirtadienis = 4,
penktadienis = 5,
Šeštadienis = 6,
Sekmadienis = 7,
}

Savaitės dienų sąraše yra septyni variantai, atspindintys kiekvieną savaitės dieną, ir kiekvienai dienai priskirta reikšmė (vadinama diskriminantu). Variantai pateikiami nuo pirmosios iki paskutinės savaitės dienos.

Diskriminuojančią reikšmę galite pasiekti naudodami varianto pavadinimą.

fnpagrindinis() {
println!("Pirmadienis: {}", Savaitės diena:: Pirmadienis kaipi32);
println!("Antradienis: {}", Savaitės diena:: Antradienis kaipi32);
println!("Trečiadienis: {}", Savaitės diena:: Trečiadienis kaipi32);
println!("Ketvirtadienis: {}", Savaitės diena:: Ketvirtadienis kaipi32);
println!("Penktadienis: {}", Savaitės diena:: Penktadienis kaipi32);
println!("šeštadienis: {}", Savaitės diena:: Šeštadienis kaipi32);
println!("Sekmadienis: {}", Savaitės diena:: Sekmadienis kaipi32);
}

The println! makrokomanda naudojama diskriminantams spausdinti. Kiekvienas spaudinys! makrokomandos iškvietimas turi du argumentus: formato eilutę ir reikšmę. Formatavimo eilutė nurodo, kaip formatuoti išvestį; reikšmė yra tikroji vertė, kuri išspausdinama.

Šiuo atveju formato eilutė yra eilutės raidė, kurioje yra savaitės dienos pavadinimas, o reikšmė yra enum variantas su aiškiai išreikštu i32 sveikojo skaičiaus tipas.

Aiškus perdavimas į i32 yra būtinas, nes „Rust“ sąrašai pateikiami kaip sveikieji skaičiai, tačiau konkretus sveikųjų skaičių tipas priklauso nuo sąrašo dydžio. Pagal numatytuosius nustatymus Rust priskiria mažiausią sveikojo skaičiaus tipą, kuris gali reikšti visus sąraše esančius diskriminantus. Tačiau šiuo atveju norite spausdinti reikšmes kaip sveikuosius i32 skaičius, todėl turite jas pateikti aiškiai.

Štai paleidimo rezultatas pagrindinis funkcija:

Rūdžių derinimo raštai

Šablonų atitikimas yra rūdžių valdymo struktūros konstrukcija, naudinga duomenų šablonams identifikuoti. Šablonų suderinimas leidžia rašyti glaustą ir efektyvų kodą dirbant su pažangios duomenų struktūros arba atlikti sudėtingas operacijas.

Jūs naudosite rungtynės raktinis žodis, po kurio eina => rašto skyriklis ir rašto operacija. Šablonas gali būti bet kokia „Rust“ išraiška, įskaitant literalus, kintamuosius ir funkcijų iškvietimus.

Štai atitikties teiginio pavyzdys:

fnpagrindinis(){
leisti x = 5;
rungtynės x {
1 => println!("vienas"),
2 => println!("du"),
3 => println!("trys"),

// veikia, jei nė vienas iš šablonų neatitinka
_ => println!("kažkas kito"),
}
}

The pagrindinis funkcijos atitinka x pagal kelis modelius ir tada atspausdina reikšmę pagal x reikšmę. Pabraukimo (_) šablonas yra pakaitos simbolio raštas, kuris naudojamas kaip visa tai, kai atvejai nėra aiškiai tvarkomi.

Enums ir modelio atitikimas

Enums ir šablonų derinimas yra naudingi norint išreikšti ir dirbti su pažangiomis duomenų struktūromis saugiu ir efektyviu būdu. Galite naudoti eilutes, kad apibrėžtumėte fiksuotą reikšmių rinkinį ir modelio atitikimą, kad galėtumėte dirbti su tomis reikšmėmis.

Štai vaivorykštės spalvų sąrašas:

enumVaivorykštė {
raudona,
oranžinė,
Geltona,
Žalias,
mėlyna,
Indigo,
Violetinė,
}

Kiekvienas variantas Vaivorykštė enum reiškia vaivorykštės spalvą. Galite naudoti modelio atitikimą su atitikties teiginiu, kad suderintumėte modelius su variantu, kad galėtumėte valdyti programos eigą pagal vaivorykštės spalvą.

Štai funkcija, kuri perima spalvų variantą iš vaivorykštės sąrašo ir spausdina pranešimą pagal spalvą.

fnprint_color(spalva: vaivorykštė) {
rungtynės spalva {
Vaivorykštė:: Raudona => println!("Spalva yra raudona!"),
Vaivorykštė:: Oranžinė => println!("Spalva yra oranžinė!"),
Vaivorykštė:: Geltona => println!("Spalva geltona!"),
Vaivorykštė:: Žalia => println!("Spalva yra žalia!"),
Vaivorykštė:: Mėlyna => println!("Spalva yra mėlyna!"),
Vaivorykštė:: Indigo => println!("Spalva yra indigo!"),
Vaivorykštė:: Violetinė => println!("Spalva violetinė!"),
}
}

fnpagrindinis() {
leisti spalva = Vaivorykštė:: Mėlyna;
print_color (spalva);
}

Galite gauti variantai niekada nekonstruojami arba panašūs įspėjimai, kai bandysite vykdyti aukščiau pateiktą kodą, nes kiti variantai, išskyrus mėlynąjį variantą, šiame kode niekada nebuvo sukurti. Taigi šiuo atveju galite saugiai nepaisyti šių įspėjimų, nes tai tyčia.

The print_color funkcija paima Rainbow enum tipo spalvų parametrą. Atitikties pareiškimas atitinka spalvą iš spalvų rinkinio, kuris pasiekiamas naudojant variantų pavadinimus. Ir galiausiai žinutė spausdinama pagal suderintą spalvą.

Galite naudoti šablonų atitikimą sudėtingoms operacijoms, pvz., kelioms grąžinimo reikšmėms pagal sąlygą.

fnapskaičiuoti_bangos ilgį(spalva: vaivorykštė) -> u32 {
rungtynės spalva {

Vaivorykštė:: Raudona => 700,
Vaivorykštė:: Oranžinė => 590,
Vaivorykštė:: Geltona => 570,
Vaivorykštė:: Žalia => 510,
Vaivorykštė:: Mėlyna => 475,
Vaivorykštė:: Indigo => 445,
Vaivorykštė:: Violetinė => 400,
}
}

The apskaičiuoti_bangos ilgį funkcija naudoja Rainbow enum tipo spalvų variantą kaip parametrą ir grąžina beženklį 32 bitų sveikąjį skaičių, kuris yra raštą atitinkančios spalvos bangos ilgis.

Rust taip pat suteikia struktūras, skirtas sukurti pasirinktinius tipus

Enums yra patogu apibrėžiant pasirinktinius kelių operacijų tipus, ypač tais atvejais, kai laukai yra žinomi ir apibrėžti.

Rust taip pat pateikia struktūras, kurias galite naudoti kurdami pasirinktinius tipus su pavadintais laukais. Skirtingai nuo enums, struktūros leidžia apibrėžti skirtingų tipų laukus, kuriuos galite pasiekti ir modifikuoti atskirai.