2010-02-23 59 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。