부분 함수

Volc·2023년 3월 29일
0

Scala

목록 보기
3/9

PartialFunction

  • 부분 함수란 함수가 모든 가능한 입력에 대해 결과를 정의하지 않는다는 뜻이다.
  • 지정한 케이스 절에서 어느 하나와 일치하는 입력에 대해서만 결과를 정의한다.
val pf1: PartialFunction[Any,String] = { case s: String => "YES"}	
// 문자열과만 일치하는 부분 함수
val pf2: PartialFunction[Any,String] = { case d: Double => "YES"}	
// Double과만 일치하는 부분 함수

val pf1 = pf1 orElse pf2		// 문자열과 더블 모두에 일치하는 새 부분 함수

def tryPF(x: Any, f: PartialFunction[Any, String]): String = 
	try { f(x).toString } 
    catch { case _: MatchError => "ERROR!" }		
    // 부분 함수를 호출하고 발생하는 MatchError를 잡아내는 함수. 성공 여부와 관계없이 문자열 반환

def d(x: Any, f: PartialFunction[Any, String]) = f.isDefinedAt(x).toString		
// isDefinedAt을 호출해서 문자열 결과를 반환하는 함수

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에 대해서만 성공한다.
profile
미래를 생각하는 개발자

0개의 댓글