Я искал немного, но не могу определить местоположение никаких примеров, которые демонстрируют использование _ * в то время как классы случая сопоставления с образцом.
Ниже пример вида приложения, к которому я обращаюсь.
def findPerimeter(o: SomeObject): Perimeter = o match {
case Type1(length, width) =>
new Perimeter(0, 0, length, width)
case Type2(radius) =>
new Perimeter(0, 0, 2*radius, 2*radius)
...
case MixedTypes(group @_*) => {
\\How could @_* be used to check subpatterns of group?
}
}
Если кто-то мог бы показать мне некоторые примеры или указать на меня на веб-страницу, которая имеет несколько примеров, которые были бы яркими.
Спасибо
Помните, что что-то вроде
Type2(3.0) match {
case t2 @ Type2(radius) => //...
}
связывает radius
со значением 3.0
и связывает t2
с экземпляром Type2, с которым производится сравнение.
Используя ваш пример:
def findPerimeter(o: SomeObject): Perimeter = o match {
case Type1(length, width) => new Perimeter(0, 0, length, width)
case Type2(radius) => new Perimeter(0, 0, 2*radius, 2*radius)
// ...
// assume that Perimeter defines a + operator
case MixedTypes(group @ _*) => group.reduceLeft(findPerimeter(_) + findPerimeter(_))
}
Здесь group
привязывается к последовательности SomeObject
ов, определяющих MixedTypes
. Вы можете обращаться с ней так же, как с последовательностью любых конструкторов-args для MixedTypes-is.
Программирование Scala от Wampler / Payne содержит пример .
Также еще один вопрос SO: Шаблон, соответствующий строке как Seq [Char]
И сообщение в блоге Daily Scala на unapplySeq .