2010-02-23 2 views
7

Tôi đã tìm kiếm một chút nhưng không thể tìm thấy bất kỳ ví dụ nào chứng minh việc sử dụng @ _ * trong khi các kiểu chữ hoa văn khớp.Tìm kiếm ví dụ về cách sử dụng "@ _ *" khi thực hiện đối sánh mẫu trong Scala

Dưới đây là ví dụ về loại ứng dụng tôi đang đề cập đến.

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? 
} 

}

Nếu ai đó có thể chỉ cho tôi một số ví dụ hoặc điểm tôi vào một trang web mà có một vài ví dụ đó sẽ là tuyệt vời.

Cảm ơn

Trả lời

5

Hãy nhớ rằng một cái gì đó giống như

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

liên kết radius với giá trị 3.0 và liên kết t2 đến trường hợp của Type2 được xuất hiện chống lại.

Sử dụng ví dụ của bạn:

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

} 

Ở đây, group được ràng buộc với chuỗi các SomeObject s mà xác định MixedTypes. Bạn có thể đối xử giống như một chuỗi bất kì cái gì-the-constructor-args-for-MixedTypes-is.