Mintaillesztés
A mintaillesztés általános szintaxisa:
match(< expr >){
case < pattern_1 > : < expr_1 >
case < pattern_2 > : < expr_2 >
...
case < pattern_n : < expr_n >
default : < expr_default >
}
Kiértékelése következő képen történik: < expr >-t összehasonlítja a < pattern_1 >-el, ha megfelelő végrehajtja az < expr_1 > utasítást,
ha nem akkor folytatja a vizsgálatot az < expr_2 >-vel, és így tovább. Ha nincs mintaegyezés akkor az < expr_default > utasítás kerül végrehajtása.
A default értéket nem kötelező megadni. Mintaillesztést végezhetünk a szabványos if-then-else szerkezettel is.
if(1 == 2){
println("Valami baj van a rendszerrel")
} else {
println("Erre gondltam")
}
Az alábbi kódrészlet teljesen ekvivalens a fentebb található if-then-else szerkezetes megoldással.
match(1 == 2){
case {true} : println("Valami baj van a rendszerrel")
case {false} : println("Erre gondltam")
}
Matching szabályok
- bármilyen érték illeszkedik az "_" mintára
- bármilyen érték megegyezik az x változó mintával és értékével, akkor köteles illeszkedni az x azonosítóra
- egy integer/float/string illeszkedik egy integer/float/string mintára, ha egyformák
- egy rekord (tuple, lista is) illeszkedik egy zárt rekord mintára, ha megegyezik a mezők száma és értéke
- egy rekord (tuple, lista is) illeszkedik egy nyílt rekord mintára, ha a minta összes mezőjének értékei megegyeznek a közös mezők értékeivel
- egy érték megegyezik egy ’ as x’ mintával, ha az érték egyezik ’’-el és x értékéhez kötődik
- egy érték megegyezik egy ’or’ mintával, ha az első al-mintájára vagy a második al-mintájára illeszkedik
- minden más esetben a mintaillesztés sikertelen