[英]Scala's monadic chaining of Try
考虑使用monadic for-understanding的函数f
, g
和h
的以下链接。
for {
x <- List ( 11, 22, 33, 44, 55 )
y <- f ( x )
z <- g ( y )
a <- h ( z )
} yield a
如果f
, g
和h
都有签名:
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
,因为存在从Option
到Seq
的隐式转换,但这对于Try
是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.