加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

斯卡拉的尝试的monadic链接

发布时间:2020-12-16 18:59:03 所属栏目:安全 来源:网络整理
导读:考虑使用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编译好.但是,如果我替换Option [Int] 试试
考虑使用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编译好.但是,如果我替换Option [Int]
试试[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来说是不可能的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读