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

斯卡拉 – 第二个莫纳德法:单位

发布时间:2020-12-16 18:25:27 所属栏目:安全 来源:网络整理
导读:我在 scala的Monads上阅读 James Iry’s blog post.我在第三部分,我对他关于单位的monad第二定律的描述感到困惑.特别是这个说法: unit(x) flatMap f = f(x) 当我应用我的心理例子,这是jame之前的monadic类型的例子,这似乎永远不会成功 val x = 1 val f = (_
我在 scala的Monads上阅读 James Iry’s blog post.我在第三部分,我对他关于单位的monad第二定律的描述感到困惑.特别是这个说法:

unit(x) flatMap f = f(x)

当我应用我的心理例子,这是jame之前的monadic类型的例子,这似乎永远不会成功

val x = 1
 val f = (_:Int) * 2
 f(x) == 2 //true
 List(x) flatMap f == 2 //fail
 Some(x) flatMap f == 2 //fail

事实上,由于类型问题,它们甚至无法编译.

澄清我明白为什么这些都失败了.我理解如何修复它们以便编译.

我的困惑是,这些似乎与文章中提出的理论相冲突.我缺少一步吗?这些类型不是真正的monad吗?标题为“Monads第二定律:单位”的部分是否不正确?

解决方法

Scala的flatMap需要一个函数来返回一个集合,而不是一个返回单个元素的函数,就像你的函数f一样.

使用地图:

List(x) map f

或让你的函数返回一个集合:

val f = (x: Int) => List(x * 2)

List(x) flatMap f

请注意,它也将返回一个集合,而不是一个整数(您将获得List(2),而不仅仅是2).

(编辑:李大同)

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

    推荐文章
      热点阅读