【问题标题】:Composing functions via map and flatmap通过 map 和 flatmap 组合函数
【发布时间】:2020-03-28 20:44:09
【问题描述】:

我在大学学习 scala,但我无法理解如何使用 map、flatmap 和 Option。这是我实验室的几个函数。我知道如何首先实施,但我不知道如何处理第二个?那么,问题来了:如何在不改变其签名的情况下实现第二个功能(使用地图和平面地图)?

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

【问题讨论】:

  • 这是一个简单的问题,但不确定是否应该回答。建议:从_. 开始实现,然后ctrl+space 并确定 map/flatmap 调用的组合是否有意义并可以编译。我想只有一个明智的解决方案。
  • 感谢您的回答。从_开始就真的很明显了。

标签: scala


【解决方案1】:
_.flatMap(f).flatMap(g).map(h)

因为:

  • _ - 收到Option[A]
  • flatMap(f) - 查看内部,返回 Option[B]flatMap() 不会重新包装)
  • flatMap(g) - 查看内部,返回 Option[C]flatMap() 不会重新包装)
  • map(h) - 查看内部,返回 D(map() 将重新包装它)

【讨论】:

  • 或者_ flatMap f flatMap g map h匹配上一个方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
相关资源
最近更新 更多