Разумевање енума и подударања шаблона је фундаментално у Русту. Истражите ефикасне технике за имплементацију оба.
Руст пружа различите типове података за обављање операција, од основних типова података као што су стрингови, цели бројеви и плутајући бројевима тачке на сложене типове података као што су вектори и низови на сложене типове података као што су структуре и набрајања.
Енумс (енумератионс) је тип података који омогућава представљање фиксног скупа вредности, као што су дани у недељи и боја дуге. Енумови су згодни када су могуће вредности за променљиву ограничене и познате.
Дефинисање енума у Русту
Декларисање енума у Русту је слично декларисање енума у Ц#. Користићете енум кључну реч која прати име и скуп витичастих заграда за дефинисање набрајања. Можете дефинисати могуће варијанте (ентитете) унутар витичастих заграда са зарезом као сепаратором.
Ево набрајања дана у недељи:
енумРадним даном {
Понедељак,
уторак,
Среда,
четвртак,
петак,
субота,
недеља,
}
Тхе Радним даном енум представља дане у недељи. Тхе
варијанти су имена дана и немају придружене вредности. Такође, варијанте вашег енума могу бити било које Руст тип података.Можете приступити варијантама тако што ћете навести име варијанте помоћу оператора за раздвајање путање (::) на попису.
дозволити дан = радни дан:: понедељак;
// статички откуцана верзија променљиве `даи`
дозволити дан: Недељни дан = Дан у недељи:: понедељак;
Код наводи да желите да приступите Понедељак варијанта набрајања дана у недељи.
Варијанте и дискриминанти енума
Варијанте енума су повезане са целобројним вредностима тзв дискриминаторно. Подразумевано, дискриминантне вредности почињу од нуле и повећавају се за 1 за следеће варијанте; међутим, могуће је навести прилагођене дискриминативне вредности за сваку варијанту.
Ево примера набрајања дана у недељи са варијантама додељеним вредностима.
енумРадним даном {
понедељак = 1,
уторак = 2,
среда = 3,
четвртак = 4,
петак = 5,
Субота = 6,
недеља = 7,
}
Енум дана у недељи има седам варијанти које представљају сваки дан у недељи, а сваки дан има вредност (која се зове дискриминант) која му је додељена. Варијанте су по редоследу од првог до последњег дана у недељи.
Можете приступити дискриминантној вредности користећи назив варијанте.
фнглавни() {
принтлн!("Понедељак: {}", Радни дан:: понедељак каои32);
принтлн!(„Уторак: {}“, Радни дан:: уторак каои32);
принтлн!("Среда: {}", Радни дан:: Среда каои32);
принтлн!(„Четвртак: {}“, Радним даном:: Четвртком каои32);
принтлн!(„петак: {}“, Радним даном:: Петак каои32);
принтлн!(„субота: {}“, Радним даном:: Суботом каои32);
принтлн!(„Недеља: {}“, Радним даном:: Недељом каои32);
}
Тхе принтлн! макро се користи за штампање дискриминаната. Сваки принтлн! Позивање макроа узима два аргумента: стринг формата и вредност. Низ формата одређује како форматирати излаз; вредност је стварна вредност која се штампа.
У овом случају, стринг формата је стринг литерал који садржи име дана у недељи, а вредност је варијанта енума са експлицитним пребацивањем на и32 целобројни тип.
Експлицитно пребацивање на и32 је неопходно јер су Руст набрајања представљена као цели бројеви, али специфични целобројни тип зависи од величине енума. Подразумевано, Руст додељује најмањи целобројни тип који може да представља све дискриминанте у набрајању. Али у овом случају, желите да одштампате вредности као и32 целе бројеве, тако да их морате експлицитно пребацити.
Ево резултата покретања главни функција:
Паттернс Матцхинг ин Руст
Упаривање узорака је конструкција структуре контроле Руст-а корисна за идентификацију образаца података. Усклађивање узорака омогућава писање сажетог и ефикасног кода током рада са напредне структуре података или извођење сложених операција.
Користићете меч кључна реч праћена => сепаратор за образац и операцију за образац, респективно. Образац може бити било који Руст израз, укључујући литерале, променљиве и позиве функција.
Ево примера изјаве о подударању:
фнглавни(){
дозволити к = 5;
меч Икс {
1 => принтлн!("један"),
2 => принтлн!("два"),
3 => принтлн!("три"),
// се покреће ако се ниједан образац не подудара
_ => принтлн!("нешто друго"),
}
}
Тхе главни функција одговара Икс према неколико образаца, а затим штампа вредност на основу вредности к. Образац доње црте (_) је шаблон џокера који се користи као свеобухватни за случајеве који нису експлицитно обрађени.
Енумс и Паттерн Матцхинг
Енумови и подударање образаца корисни су за изражавање и рад са напредним структурама података на безбедан и ефикасан начин. Можете користити енуме да дефинишете фиксни скуп вредности и подударање шаблона за рад са тим вредностима.
Ево набрајања боја у дуги:
енумРаинбов {
црвена,
наранџаста,
жута,
Зелен,
Плави,
индиго,
љубичица,
}
Свака варијанта Раинбов енум представља боју дуге. Можете да користите подударање шаблона са наредбом подударања да бисте упарили обрасце са варијантом да бисте контролисали ток програма на основу дугине боје.
Ево функције која узима варијанту боје из Раинбов енума и штампа поруку на основу боје.
фнпринт_цолор(боја: Раинбов) {
меч боја {
Дуга:: Црвена => принтлн!("Боја је црвена!"),
Дуга:: Наранџаста => принтлн!("Боја је наранџаста!"),
Дуга:: Жута => принтлн!("Боја је жута!"),
Дуга:: Зелена => принтлн!("Боја је зелена!"),
Дуга:: Плава => принтлн!("Боја је плава!"),
Раинбов:: Индиго => принтлн!("Боја је индиго!"),
Раинбов:: Виолет => принтлн!("Боја је љубичаста!"),
}
}
фнглавни() {
дозволити боја = Раинбов:: Плава;
принт_цолор (боја);
}
Можда ћете добити варијанте се никада не конструишу или слична упозорења када покушате да извршите горњи код јер друге варијанте осим Плаве варијанте никада нису биле конструисане у овом коду. Стога, у овом случају, можете безбедно да игноришете ова упозорења јер су намерна.
Тхе принт_цолор функција узима параметар боје типа набрајања Раинбов. Изјава подударања одговара боји из скупа боја којима се приступа преко имена варијанти. И коначно, порука се штампа на основу одговарајуће боје.
Можете да користите подударање шаблона за сложене операције као што су вишеструке повратне вредности на основу услова.
фнизрачунати_таласну дужину(боја: Раинбов) -> у32 {
меч боја {
Дуга:: Црвена => 700,
Дуга:: Наранџаста => 590,
Дуга:: Жута => 570,
Дуга:: Зелена => 510,
Дуга:: Плава => 475,
Раинбов:: Индиго => 445,
Раинбов:: Виолет => 400,
}
}
Тхе израчунати_таласну дужину функција узима варијанту боје типа Раинбов енум као параметар и враћа неозначени 32-битни цео број који је таласна дужина боје која одговара узорку.
Руст такође пружа структуре за креирање прилагођених типова
Енумови су згодни за дефинисање прилагођених типова за неколико операција, посебно у случајевима када су поља позната и одређена.
Руст такође пружа структуре које можете користити за креирање прилагођених типова са именованим пољима. За разлику од енума, структуре вам омогућавају да дефинишете поља различитих типова којима можете приступити и изменити их појединачно.