я сначала хотел бы отметить, что вы не используете шаблон сопоставления «вместо» выписок переключателя , В Scala нет операторов switch
, то, что у него есть, есть блоки соответствия, причем случаи внутри этого внешне внешне очень похожи на оператор switch.
Соединительные блоки с совпадением рисунков делает все, что switch
делает, и многое другое.
A) Он не ограничивается только примитивами и другими типами, которые Oracle выбрал для «благословения» в языке spec (строки и перечисления). Если вы хотите совпадать с вашими собственными типами, идите прямо вперед!
B) Соответствие шаблону также может извлечь. Например, с кортежем:
val tup = ("hello world", 42)
tup match {
case (s,i) =>
println("the string was " + s)
println("the number was " + i
}
со списком:
val xs = List(1,2,3,4,5,6)
xs match {
case h :: t =>
// h is the head: 1
// t is the tail: 2,3,4,5,6
// The :: above is also an example of matching with an INFIX TYPE
}
с корпусом класса
case class Person(name: String, age: Int)
val p = Person("John Doe", 42)
p match {
case Person(name, 42) =>
//only extracting the name here, the match would fail if the age wasn't 42
println(name)
}
С) сопоставление с образцом может быть использовано в присвоении значения и для- соображениями, а не только в контрольных блоках:
val tup = (19,73)
val (a,b) = tup
for((a,b) <- Some(tup)) yield a+b // Some(92)
D), матч блоки представляют собой выражения, а не заявления
Это означает, что они оценивают к телу в зависимости от того случая было подобрано, вместо того чтобы действовать исключительно за счет побочных эффектов. Это важно для функционального программирования!
val result = tup match { case (a,b) => a + b }
Может быть лучше для http://programmers.stackexchange.com или даже http://cs.stackexchange.com/help/on-topic. Резюме моего понимания - шаблоны дают вам гораздо большую гибкость, чтобы «сопоставлять и деконструировать» в очень компактной форме. Попробуйте написать случай 'switch' для чего-то вроде« списка из 3-х элементов, где второй имеет особый тип »на обычном языке ... –
Я знаю, что это проблеск, но ... Сравнение шаблонов Scala - это« переключатель »Java как атомная бомба это ручная граната. –
Ручная граната? Я думал больше о лабиринтах ... –