14.3. Znak podkreślenia we wzorcach
Znak podkreślenia jest wzorcem dopasowującym każdą wartość.
Plik PatternsUnderscore1.scala: def underscorePattern(value: Any):String = value match { case "abc" => "String abc matched." case 11 => "Number 11 abc matched." case _ => "Other value."
}
Taki wzorzec jest użyty w pliku PatternsUnderscore1.scala, w wierszu
.
scala> :load PatternsUnderscore1.scala
Loading PatternsUnderscore1.scala...
underscorePattern: (value: Any)String
scala> underscorePattern("abc")
res0: String = String abc matched.
scala> underscorePattern(11)
res1: String = Number 11 abc matched.
scala> underscorePattern(12)
res2: String = Other value.
Wzorce w wyrażeniu match są sprawdzane kolejno, począwszy od góry. Ponieważ wzorzec składający się z pojedynczego znaku podkreślenia dopasowuje każdą wartość, to w wyrażeniu match powinien wystąpić jedynie jako ostatni z wzorców.
Plik PatternsUnderscore2.scala: def underscorePattern2(value: Any) = value match { case "abc" => "String abc matched." case _ => "Other value." case 11 => "Number 11 abc matched." }
W metodzie underscorePattern2 z pliku PatternsUnderscore2.scala taki wzorzec nie jest ostatni, co powoduje wystąpienie ostrzeżeń kompilacji.
scala> :load PatternsUnderscore2.scala
Loading PatternsUnderscore2.scala...
<console>:13: warning: patterns after a variable pattern cannot match (SLS 8.1.1)
case _ => "Other value."
^
<console>:14: warning: unreachable code due to variable pattern on line 13
case 11 => "Number 11 abc matched."
^
<console>:14: warning: unreachable code
case 11 => "Number 11 abc matched."
^
underscorePattern2: (value: Any)String
Plik PatternsUnderscore1.scala:
def underscorePattern(value: Any):String =
value match {
case "abc" => "String abc matched."
case 11 => "Number 11 abc matched."
case _ => "Other value." 