我一直在搜索,但在模式匹配案例类时找不到任何演示@ _ *用法的例子。
下面是我所指的那种应用程序的示例。
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?
}
}
如果有人可以向我展示一些示例或指向一个网页,其中包含一些很棒的示例。
由于
答案 0 :(得分:5)
记住像
这样的东西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
的{{1}} s序列。你可以对待就像是一个无论构造函数args-for-MixedTypes的序列。
答案 1 :(得分:3)
Wampler / Payne对Scala进行编程an example。
另外一些SO问题: Pattern matching a String as Seq[Char]
每日Scala博客文章unapplySeq。