我一直在搜索,但找不到任何示例在模式匹配案例类时演示 @_* 的用法。
下面是我所指的那种应用程序的一个例子。
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) => //...
}
绑定(bind)
radius
到值
3.0
并绑定(bind)
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
绑定(bind)到
SomeObject
的序列s 定义
MixedTypes
.您可以将其视为构造函数参数用于混合类型的序列。