对于理解标度
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)
理解是关于 Option
、List
、Future
(任何具有 map
、flatMap
和 filter
等方法的东西)并且没有特别的功能。你不应该为了理解而特地做.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)
}
我正在学习 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)
理解是关于 Option
、List
、Future
(任何具有 map
、flatMap
和 filter
等方法的东西)并且没有特别的功能。你不应该为了理解而特地做.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)
}