두 변수와 두 변수를 계산하는 이항 함수(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))

'scala' 카테고리의 다른 글

[scala] zip/unzip 예시  (0) 2017.01.10
[scala] () => A라는 형식의 Thunk 예시  (0) 2017.01.04
[scala] reflection api 예시  (0) 2016.12.21
[scala] 스칼라 스크립트 실행 코드 예시  (0) 2016.12.16
[scala] 쉘 실행하기  (0) 2016.12.13
Posted by '김용환'
,