2010-02-23 82 views
7

我一直在寻找一点,但找不到任何演示@ _ *在模式匹配案例类中使用的示例。寻找在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? 
} 

}

如果有人能告诉我一些例子或点我到一个网页,有几个例子,这将是巨大的。

感谢

回答

5

记住,像

Type2(3.0) match { 
    case t2 @ Type2(radius) => //... 
} 

结合radius的价值3.0并结合t2打击相匹配的2型的实例。

使用你的例子:

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 s表示定义MixedTypes序列。你可以对待就像一系列的任何构造函数参数为MixedTypes。

相关问题