두 변수와 두 변수를 계산하는 이항 함수(binary function)을 계산하는 함수는 

for 내장으로 변경할 수 있다. 


def map1[A, B, C](a: Option[A], b: Option[B], f: (A, B) => C): Option[C] = {
a flatMap (aa => b map(bb => f(aa, bb)))
}
// for comprehension for 내장
def map2[A, B, C](a: Option[A], b: Option[B], f: (A, B) => C): Option[C] = {
for {
aa <- a
bb <- b
} yield f(aa, bb)
}


val a1 = Some(10)
val b1 = Some(20)
def fff1(x: Int, y: Int): Option[Int] = {
Some(x + y)
}
println(map1(a1, b1, fff1))
println(map2(a1, b1, fff1))

val a2 = Some("xyz")
val b2 = Some("abc")
def fff2(x: String, y: String): Option[String] = {
Some(x + y)
}
println(map1(a2, b2, fff2))
println(map2(a2, b2, fff2))


결과는 다음과 같다. 


Some(Some(30))

Some(Some(30))

Some(Some(xyzabc))

Some(Some(xyzabc))

Posted by '김용환'

댓글을 달아 주세요