14.2. Literały i identyfikatory we wzorcach

Istnieje wiele postaci, jakie mogą przyjmować wzorce występujące w dopasowaniach. Wzorcami użytymi w przykładzie z pliku PatternMatch1.scala są literały liczbowe. Również inne literały mogą być użyte jako wzorce. Wzorcami mogą być również identyfikatory obiektów i wartości niezmiennych. W przypadku stosowania identyfikatorów istnieje dodatkowy warunek — nazwa identyfikatora powinna się zaczynać od dużej litery, a jeśli chcemy dopasować wartość, której identyfikator zaczyna się od małej litery, to należy go umieścić wewnątrz znaków odwrotnego apostrofu `. Identyfikatory zaczynające się z małej litery, nieujęte w takie apostrofy, są we wzorcach traktowane jako zmienne.

Plik PatternsConstants.scala:
object abc
object ABC
def constPattern(value: Any):String =
  value match {
    case "abc" => "string abc"
    case `abc` => "object abc" 
    case ABC   => "object ABC"
    case 'abc  => "symbol abc"
    case 'a'   => "Char a"
    case 123   => "Int 123"
  }

Plik PatternsConstants.scala zawiera definicję metody constPattern, w której wyrażenie match zawiera różnego literały i identyfikatory. Wzorzec z wiersza dopasowuje obiekt abc. Identyfikator tego obiektu został w nim ujęty w odwrotne apostrofy, gdyż jego nazwa zaczyna się z małej litery.

scala> :load PatternsConstants.scala
Loading PatternsConstants.scala...
defined object abc
defined object ABC
constPattern: (value: Any)String

scala> constPattern("abc")
res0: String = string abc
scala> constPattern(abc)
res1: String = object abc

scala> constPattern(ABC)
res2: String = object ABC

scala> constPattern('abc)
res3: String = symbol abc

scala> constPattern('a')
res4: String = Char a

scala> constPattern(123)
res5: String = Int 123

Język programowania Scala Wydanie 2. Copyright © Grzegorz Balcerek 2016

Licencja Creative Commons

Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowe.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.