簡體   English   中英

對於理解 scala

[英]For comprehensions scala

我正在學習 scala,現在我想了解如何將壓縮用於 function 組合。 這是一個 function 我應該在不更改其簽名的情況下實現它。 而且我幾乎完成了,但我不知道如何處理其中的 None 。 你能告訴我如何修改它以獲得正確的 None 處理嗎? 或者也許我完全錯了,並且以另一種方式使用理解來組合 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)

對於理解是關於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)
  }
for {
  a <- _
  b <- f(a)
  c <- g(b)
} yield h(c)

因為理解只是 jwvh答案的糖化版本

_.flatMap(f).flatMap(g).map(h)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM