在Scala中进行模式匹配时,查看如何使用"@ _*"的示例

kla*_*ose 7 scala operators pattern-matching

我一直在搜索,但找不到任何演示模式匹配案例类的@ _*的示例.

下面是我所指的那种应用程序的示例.

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?
}
Run Code Online (Sandbox Code Playgroud)

}

如果有人可以向我展示一些示例,或者将我指向一个网页,其中包含一些很棒的示例.

谢谢

Mit*_*ins 5

记住那样的事情

Type2(3.0) match {
  case t2 @ Type2(radius) => //...
}
Run Code Online (Sandbox Code Playgroud)

绑定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(_))

}
Run Code Online (Sandbox Code Playgroud)

这里,group绑定到SomeObject定义的序列MixedTypes.你可以对待就像一个无论构造函数args-for-MixedTypes是什么的序列.