Enumien ja kuvioiden yhteensopivuuden ymmärtäminen on Rustissa olennaista. Tutustu tehokkaisiin tekniikoihin molempien toteuttamiseen.

Rust tarjoaa erilaisia ​​tietotyyppejä toimintojen suorittamiseen perustietotyypeistä, kuten merkkijonoista, kokonaisluvuista ja kelluvista pistenumerot yhdistetyille tietotyypeille, kuten vektoreille ja taulukoille, yhdistettyihin tietotyyppeihin, kuten rakenteisiin ja luetteloihin.

Enums (luettelot) on tietotyyppi, jonka avulla voidaan esittää kiinteät arvot, kuten viikonpäivät ja sateenkaaren väri. Enummit ovat käteviä, kun muuttujan mahdolliset arvot ovat rajallisia ja tiedossa.

Enumien määrittäminen ruosteessa

Enumien ilmoittaminen ruosteessa on samanlaista kuin enumien ilmoittaminen C#:ssa. Tulet käyttämään enum avainsanan jälkeen nimeä ja joukko kiharoita aaltosulkeet määrittelemään luetteloita. Voit määrittää mahdolliset muunnelmat (entiteetit) aaltosulkeiden sisällä käyttämällä pilkkua erottimena.

Tässä luettelo viikonpäivistä:

enumViikonpäivä {
Maanantai,
Tiistai,
Keskiviikko,
Torstai,
Perjantai,
lauantai,
Sunnuntai,
}
instagram viewer

The Viikonpäivä enum edustaa viikonpäiviä. The muunnelmia ovat päivän nimiä, eikä niihin liity arvoja. Myös enum-versiot voivat olla mitä tahansa Ruostetietotyyppi.

Voit käyttää muunnelmia määrittämällä muunnelman nimen polun erotin (::) -operaattorilla enumissa.

antaa päivä = Viikonpäivä:: Maanantai;

// staattisesti kirjoitettu versio muuttujasta "day".
antaa päivä: Viikonpäivä = Viikonpäivä:: Maanantai;

Koodi määrittää, että haluat käyttää maanantai variantti arkipäiväluettelosta.

Enumien muunnelmat ja erottimet

Enumin muunnelmat liittyvät kokonaislukuarvoihin, joita kutsutaan syrjivä. Oletusarvoisesti erottelevat arvot alkavat nollasta ja niitä kasvatetaan 1:llä seuraaville muunnelmille; jokaiselle versiolle on kuitenkin mahdollista määrittää mukautettuja erotteluarvoja.

Tässä on esimerkki arkipäiväluettelosta, jossa on arvolla määritetyt muunnelmat.

enumViikonpäivä {
Maanantai = 1,
Tiistai = 2,
Keskiviikko = 3,
Torstai = 4,
Perjantai = 5,
lauantai = 6,
Sunnuntai = 7,
}

Viikonpäiväluettelossa on seitsemän muunnelmaa, jotka edustavat jokaista viikonpäivää, ja jokaiselle päivälle on määritetty arvo (kutsutaan erottajaksi). Vaihtoehdot ovat järjestyksessä viikon ensimmäisestä viimeiseen päivään.

Pääset erottelevaan arvoon muunnelman nimellä.

fnpää() {
println!("Maanantai: {}", Arkipäivä:: Maanantai kuteni32);
println!("tiistai: {}", Arkipäivä:: Tiistai kuteni32);
println!("Keskiviikko: {}", Arkipäivä:: Keskiviikko kuteni32);
println!("torstai: {}", Arkipäivä:: Torstai kuteni32);
println!("Perjantai: {}", Arkipäivä:: Perjantai kuteni32);
println!("Lauantai: {}", Arkipäivä:: Lauantai kuteni32);
println!("Sunnuntai: {}", Arkipäivä:: Sunnuntai kuteni32);
}

The println! makroa käytetään erottajien tulostamiseen. Jokainen println! makron kutsumiseen tarvitaan kaksi argumenttia: muotomerkkijono ja arvo. Muotoilumerkkijono määrittää, kuinka tulos muotoillaan; arvo on todellinen arvo, joka tulostetaan.

Tässä tapauksessa muotomerkkijono on merkkijonoliteraali, joka sisältää viikonpäivän nimen, ja arvo on enum-muunnelma, jossa on eksplisiittinen heitto i32 kokonaislukutyyppi.

Eksplisiittinen cast i32:een on tarpeen, koska Rust-enumit esitetään kokonaislukuina, mutta tietty kokonaislukutyyppi riippuu enumin koosta. Oletusarvoisesti Rust määrittää pienimmän kokonaislukutyypin, joka voi edustaa kaikkia enum: n erottajia. Mutta tässä tapauksessa haluat tulostaa arvot i32-kokonaislukuina, joten sinun täytyy lähettää ne nimenomaisesti.

Tässä tulos juoksemisesta pää toiminto:

Ruosteen yhteensopivat kuviot

Pattern matching on ruosteenhallintarakennerakenne, joka on hyödyllinen tietokuvioiden tunnistamisessa. Kuvioiden täsmäyttäminen mahdollistaa tiiviin ja tehokkaan koodin kirjoittamisen kanssa käytettäessä kehittyneitä tietorakenteita tai suorittaa monimutkaisia ​​toimintoja.

Tulet käyttämään ottelu avainsana ja sen jälkeen => kuvion erotin ja kuvion toiminto. Kuvio voi olla mikä tahansa Rust-lauseke, mukaan lukien literaalit, muuttujat ja funktiokutsut.

Tässä on esimerkki vastaavuuslauseesta:

fnpää(){
antaa x = 5;
ottelu x {
1 => println!("yksi"),
2 => println!("kaksi"),
3 => println!("kolme"),

// suoritetaan, jos mikään kaavoista ei täsmää
_ => println!("jotain muuta"),
}
}

The pää funktio vastaa x useita kuvioita vastaan ​​ja tulostaa sitten arvon x: n arvon perusteella. Alaviiva (_) on jokerimerkkikuvio, jota käytetään keräilynä tapauksille, joita ei käsitellä erikseen.

Enumit ja kuvioiden yhteensopivuus

Enumit ja kuvioiden täsmääminen ovat hyödyllisiä kehittyneiden tietorakenteiden ilmaisemiseen ja työskentelyyn tyyppiturvallisella ja tehokkaalla tavalla. Voit käyttää enumeita määrittääksesi kiinteän joukon arvoja ja mallinsovitusta, joka toimii näiden arvojen kanssa.

Tässä on luettelo sateenkaaren väreistä:

enumSateenkaari {
Punainen,
Oranssi,
Keltainen,
Vihreä,
Sininen,
Indigo,
Violetti,
}

Jokainen muunnelma Sateenkaari enum edustaa sateenkaaren väriä. Voit käyttää kuvioiden yhteensovittamista match-lauseen kanssa sovittaaksesi kuvioita muunnelmaan ja ohjataksesi ohjelman kulkua sateenkaaren värin perusteella.

Tässä on toiminto, joka ottaa värivaihtoehdon Rainbow-luettelosta ja tulostaa viestin värin perusteella.

fnprint_color(väri: Rainbow) {
ottelu väri {
Sateenkaari:: Punainen => println!("Väri on punainen!"),
Sateenkaari:: Oranssi => println!("Väri on oranssi!"),
Sateenkaari:: Keltainen => println!("Väri on keltainen!"),
Sateenkaari:: Vihreä => println!("Väri on vihreä!"),
Sateenkaari:: Sininen => println!("Väri on sininen!"),
Sateenkaari:: Indigo => println!("Väri on indigo!"),
Sateenkaari:: Violetti => println!("Väri on violetti!"),
}
}

fnpää() {
antaa väri = Sateenkaari:: Sininen;
print_color (väri);
}

Saatat saada variantteja ei koskaan rakenneta tai vastaavia varoituksia, kun yrität suorittaa yllä olevan koodin, koska muita muunnelmia kuin Sininen variantti ei koskaan rakennettu tähän koodiin. Joten tässä tapauksessa voit turvallisesti jättää nämä varoitukset huomioimatta, koska se on tarkoituksellista.

The print_color funktio ottaa vastaan ​​Rainbow enum -tyypin väriparametrin. Vastaavuuslausunto vastaa värejä joukosta värejä, joihin pääsee muunnelmien nimien kautta. Ja lopuksi viesti tulostetaan vastaavan värin perusteella.

Voit käyttää kuvioiden täsmäämistä monimutkaisiin toimintoihin, kuten useisiin ehtoon perustuviin palautusarvoihin.

fnlaske_aallonpituus(väri: Rainbow) -> u32 {
ottelu väri {

Sateenkaari:: Punainen => 700,
Sateenkaari:: Oranssi => 590,
Sateenkaari:: Keltainen => 570,
Sateenkaari:: Vihreä => 510,
Sateenkaari:: Sininen => 475,
Sateenkaari:: Indigo => 445,
Sateenkaari:: Violetti => 400,
}
}

The laske_aallonpituus funktio ottaa parametriksi Rainbow enum -tyypin värimuunnelman ja palauttaa etumerkittömän 32-bittisen kokonaisluvun, joka on kuviota vastaavan värin aallonpituus.

Rust tarjoaa myös rakenteita mukautettujen tyyppien luomiseen

Enumit ovat käteviä useiden toimintojen mukautettujen tyyppien määrittämiseen, erityisesti tapauksissa, joissa kentät ovat tiedossa ja määrättyjä.

Rust tarjoaa myös rakenteita, joiden avulla voit luoda mukautettuja tyyppejä nimetyillä kentillä. Toisin kuin enumit, rakenteiden avulla voit määrittää erityyppisiä kenttiä, joita voit käyttää ja muokata yksitellen.