对于理解标度

For comprehensions scala

我正在学习 scala,现在我想了解如何使用 for-comprensions 进行函数组合。这是我应该在不更改其签名的情况下实现的功能。我几乎完成了,但我不知道如何处理其中的 None。你能告诉我如何修改它以获得正确的 None 处理吗?或者也许我完全错了,for-comprehensions 以另一种方式用于在 scala 中组合函数?谢谢

 def testForComprehension[A, B, C, D](f: A => Option[B])
                            (g: B => Option[C])
                            (h: C => D): Option[A] => Option[D] = for { first <- _
                                                              second = f(first).get
                                                              third = g(second).get } yield h(third)
for {
  a <- _
  b <- f(a)
  c <- g(b)
} yield h(c)

因为 for-comprehension 只是 jwvh

的加糖版本
_.flatMap(f).flatMap(g).map(h)

理解是关于 OptionListFuture(任何具有 mapflatMapfilter 等方法的东西)并且没有特别的功能。你不应该为了理解而特地做.get

您可能需要关注

  def testForComprehension[A, B, C, D](
    f: A => Option[B]
  )(g: B => Option[C])(h: C => D): Option[A] => Option[D] = { v =>
    for {
      first <- v
      second <- f(first)
      third <- g(second)
    } yield h(third)
  }