繁体   English   中英

斯卡拉的尝试的monadic链接

[英]Scala's monadic chaining of Try

考虑使用monadic for-understanding的函数fgh的以下链接。

  for {
    x <- List ( 11, 22, 33, 44, 55 )
    y <- f ( x )
    z <- g ( y )
    a <- h ( z )
  } yield a

如果fgh都有签名:

  Int => Option [ Int ] 

然后for-comprehension编译好。 但是,如果我用Try [ Int ]替换Option [ Int ] ,Scala的类型推理器会抱怨该行

  y <- f ( x )

以下错误消息。

  error: type mismatch;
  found   : scala.util.Try[Int]
  required: scala.collection.GenTraversableOnce[?]
      y <- f ( x )

为什么? Option [ _ ]Try [ _ ]都是(或应该是)monad,并且应该如草绘一样顺畅。

您只能在理解中使用相同类型的monad。 在这种情况下,您的所有值都必须是GenTraversableOnce ,因为第一个值是。 它适用于Option ,因为存在从OptionSeq的隐式转换,但这对于Try是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM