Scala posiada wbudowany mechanizm dopasowania wzorców. Umożliwia on dopasowanie dowolnego rodzaju danych, przy czym zawsze zwracamy pierwsze dopasowanie. Przykład dopasowania liczby całkowitej:
object MatchTest1 extends App {
def matchTest(x: Int): String = x match {
case 1 => "one"
case 2 => "two"
case _ => "many"
}
println(matchTest(3))
}
Blok kodu z wyrażeniami case
definiuje funkcję, która przekształca liczby całkowite na łańcuchy znaków. Słowo kluczowe match
pozwala w wygodny sposób zastosować dopasowanie wzorca do obiektu.
Wzorce można także dopasowywać do różnych typów wartości:
object MatchTest2 extends App {
def matchTest(x: Any): Any = x match {
case 1 => "one"
case "two" => 2
case y: Int => "scala.Int"
}
println(matchTest("two"))
}
Pierwszy przypadek jest dopasowany, gdy x
jest liczbą całkowitą równą 1
. Drugi określa przypadek, gdy x
jest równe łańcuchowi znaków "two"
. Ostatecznie mamy wzorzec dopasowania typu. Jest on spełniony, gdy x
jest dowolną liczbą całkowitą oraz gwarantuje, że y
jest (statycznie) typu liczby całkowitej.
Dopasowanie wzorca w Scali jest najbardziej użyteczne z wykorzystaniem typów algebraicznych modelowanych przez klasy przypadków.
Scala pozwala też na używanie wzorców niezależnie od klas przypadków - używając metody unapply
definiowanej przez obiekty ekstraktorów.
Contributors to this page:
Contents
- Wprowadzenie
- Podstawy
- Hierarchia typów
- Klasy
- Domyślne wartości parametrów
- Parametry nazwane
- Cechy
- Krotki
- Kompozycja klas przez domieszki
- Funkcje wyższego rzędu
- Funkcje zagnieżdżone
- Rozwijanie funkcji (Currying)
- Klasy przypadków
- Dopasowanie wzorców (Pattern matching)
- Obiekty singleton
- Wzorce wyrażeń regularnych
- Obiekty ekstraktorów
- For Comprehensions
- Klasy generyczne
- Wariancje
- Górne ograniczenia typów
- Dolne ograniczenia typów
- Klasy wewnętrzne
- Typy abstrakcyjne
- Typy złożone
- Jawnie typowane samoreferencje
- Parametry domniemane
- Konwersje niejawne
- Metody polimorficzne
- Lokalna inferencja typów
- Operatory
- Parametry przekazywane według nazwy
- Adnotacje
- Pakiety i importy
- Obiekty pakietu