2010-05-10 2 views
5

사례 코드를 포함하는 매개 변수로 코드 블록을 가져 오는 함수를 어떻게 작성합니까? 예를 들어, 코드 블록에서 일치 또는 기본 사례를 명시 적으로 수행하고 싶지 않습니다. 나는 이런 식으로보고있다.패턴 일치 코드 블록을 스칼라로 코딩하는 방법은 무엇입니까?

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

내 myApi() 안에 실제로 코드 블록을 실행하고 일치하는 부분을 찾는다.

답변

6

당신은 이것에 대한 PartialFunction을 사용해야합니다.

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

감사! 나는 그것이 이상한 것임을 알았지 만, 나는 이것의 모범을 발견 할 수 없었다. – egervari

+0

@egervari 동일한 패턴이 'Function1'에도 적용됩니다. 'case' 명령문이있는 블록은 함수 리터럴이며 예상되는 형식이 무엇인지에 따라'PartialFunction'과'Function1'을 모두 나타낼 수 있습니다. –

-1

이 그것을 설명하기 위해 충분해야합니다 A Tour of Scala: Pattern Matching

+0

아니요, 일치하는 패턴을 알고 있습니다 ... 나는 case 문으로 만 구성된 코드 블록을 취하는 함수를 만들고 싶습니다 ... 그 함수는 내부적으로 일치하는 내용을 처리해야합니다. 기본적으로 일반 코드 블록의 경우 (=> Unit) 매개 변수가 있지만 패턴 일치의 경우에는 다릅니다. 본질적으로 정규 코드 블록에 대해서도 case 문에 대해 동일한 작업을 수행하려고합니다. – egervari