2010-05-10 38 views
5

Làm cách nào để mã hóa một hàm thực hiện trong một khối mã như một tham số có chứa các câu lệnh case? Ví dụ, trong khối mã của tôi, tôi không muốn làm một trận đấu hoặc một trường hợp mặc định một cách rõ ràng. Tôi trông giống như thế nàyLàm thế nào để bạn mã hóa một khối mã mẫu phù hợp trong scala?

myApi { 
    case Whatever() => // code for case 1 
    case SomethingElse() => // code for case 2 
} 

Và bên trong myApi(), nó thực sự sẽ thực thi khối mã và thực hiện các kết quả phù hợp.

Trả lời

6

Bạn phải sử dụng một PartialFunction cho việc này.

scala> def patternMatchWithPartialFunction(x: Any)(f: PartialFunction[Any, Unit]) = f(x) 
patternMatchWithPartialFunction: (x: Any)(f: PartialFunction[Any,Unit])Unit 

scala> patternMatchWithPartialFunction("hello") { 
    | case s: String => println("Found a string with value: " + s) 
    | case _ => println("Found something else") 
    | } 
Found a string with value: hello 

scala> patternMatchWithPartialFunction(42) { 
    | case s: String => println("Found a string with value: " + s) 
    | case _ => println("Found something else") 
    | } 
Found something else 
+0

Cảm ơn! Tôi biết đó là điều kỳ lạ, nhưng tôi không thể tìm thấy một ví dụ về điều này. – egervari

+0

@egervari cùng một mẫu áp dụng cho 'Function1'. Các khối có các câu lệnh 'case' là các hàm chức năng, và có thể đứng cho cả' PartialFunction' và 'Function1', tùy thuộc vào kiểu mong đợi là gì. –

-1

này nên đủ để giải thích nó: A Tour of Scala: Pattern Matching

+0

Không, tôi biết cách khớp mẫu ... Tôi muốn tạo một hàm bao gồm một khối mã chỉ bao gồm các trường hợp ... và sau đó có hàm xử lý đối sánh nội bộ. Về cơ bản, đối với các khối mã thông thường, chúng ta có một tham số với (=> Đơn vị), nhưng nó khác nhau cho khớp mẫu. Tôi về cơ bản muốn làm điều tương tự cho các khối mã thông thường nhưng đối với trường hợp báo cáo. – egervari

Các vấn đề liên quan