Поиск примеров того, как использовать “_ *” при выполнении сопоставления с образцом в Scala

Я искал немного, но не могу определить местоположение никаких примеров, которые демонстрируют использование _ * в то время как классы случая сопоставления с образцом.

Ниже пример вида приложения, к которому я обращаюсь.

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?
}

}

Если кто-то мог бы показать мне некоторые примеры или указать на меня на веб-страницу, которая имеет несколько примеров, которые были бы яркими.

Спасибо

7
задан klactose 23 February 2010 в 04:07
поделиться

2 ответа

Помните, что что-то вроде

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.

5
ответ дан 7 December 2019 в 05:21
поделиться

Программирование Scala от Wampler / Payne содержит пример .

Также еще один вопрос SO: Шаблон, соответствующий строке как Seq [Char]

И сообщение в блоге Daily Scala на unapplySeq .

3
ответ дан 7 December 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: