我在大学学习scala,不知道如何使用map、flatmap和Option。下面是我实验室的几个函数。我知道如何实现第一个,但不知道如何处理第二个?所以,问题是:如何在不改变第二个函数签名的情况下实现它(使用map和flatmap(?
def testCompose[A, B, C, D](f: A => B)
(g: B => C)
(h: C => D): A => D = h compose g compose f
def testMapFlatMap[A, B, C, D](f: A => Option[B])
(g: B => Option[C])
(h: C => D): Option[A] => Option[D] = // help
_.flatMap(f).flatMap(g).map(h)
因为:
_
-接收Option[A]
flatMap(f)
-偷看内部,返回Option[B]
(flatMap()
不会重新包装(flatMap(g)
-偷看内部,返回Option[C]
(flatMap()
不会重新包装(map(h)
-窥视内部,返回D(map()
将重新包裹它(