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