PartialFunction
- 부분 함수란 함수가 모든 가능한 입력에 대해 결과를 정의하지 않는다는 뜻이다.
- 지정한 케이스 절에서 어느 하나와 일치하는 입력에 대해서만 결과를 정의한다.
val pf1: PartialFunction[Any,String] = { case s: String => "YES"}
val pf2: PartialFunction[Any,String] = { case d: Double => "YES"}
val pf1 = pf1 orElse pf2
def tryPF(x: Any, f: PartialFunction[Any, String]): String =
try { f(x).toString }
catch { case _: MatchError => "ERROR!" }
def d(x: Any, f: PartialFunction[Any, String]) = f.isDefinedAt(x).toString
println("str", 3.14, 10) foreach {
x => printf("%-5s | %-5s | %-6s | %-5s | %-6s\n",
xtoString, d(x,pf1), d(x,pf2), tryPF(x, pf2), d(x, pf), tryPF(x, pf)) }
- pf1은 String이 주어지지 않은면 실패한다.
- pf2는 Double이 주어지지 않으면 실패한다.
- pf3는 String이나 Double에 대해서만 성공한다.