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

scala – Option.fold – 为什么它的第二个参数不是二元运算符?

发布时间:2020-12-16 18:33:49 所属栏目:安全 来源:网络整理
导读:我确信这是有充分理由的,但我没有看到它. 折叠(比如)列表返回 the result of applying fold operator op between all the elements and z 它与foldLeft和foldRight有明显的关系,它们做同样的事情但是定义了顺序(因此不需要关联运算符) 折叠选项返回 Returns
我确信这是有充分理由的,但我没有看到它.

折叠(比如)列表返回

the result of applying fold operator op between all the elements and z

它与foldLeft和foldRight有明显的关系,它们做同样的事情但是定义了顺序(因此不需要关联运算符)

折叠选项返回

Returns the result of applying f to this scala.Option‘s value if the scala.Option is nonempty. Otherwise,evaluates expression ifEmpty.

ifEmpty是List的z(在其位置). f是op的(在其位置)

对于None(使用我的心理模型的Option作为“容器”,可能包含或不包含值,是一个“空”容器),一切正常,Option.fold返回零(ifEmpty的值).

但是对于某些(x),不应该采用两个参数,z和x,因此它与序列上的折叠一致(包括与foldLeft和foldRight具有类似关系).

肯定有一个针对此的实用程序参数 – 在实践中只需将x作为参数可能更方便.在大多数情况下,如果确实采取了z,那将被忽略.但一致性也很重要……

那么有人可以向我解释为什么折扣选项仍然是一个“适当的”折叠?

解决方法

为什么会这样?

折叠“正常”采用二元运算符的原因是因为“正常”用于可以使用二元运算符(和种子值z)逐个处理的列表.

实际上,折叠选项是具有默认情况的地图函数.如果你看一下它的定义,它的字面意思是:

if (isEmpty) ifEmpty else f(this.get)

由于您只有一个可能的参数,因此f必须是一元运算符.有人可能会争辩有一个选项fold,它接受二元运算符,并在定义选项时使用ifEmpty值作为种子,但是你的合理种子值和当选项为空时的合理值可能会大不相同.

正如有人所指出的,对于不同的结构,你需要不同的元素(例如树木),因为减少的“合理”应用具有不同的结构.

(编辑:李大同)

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

    推荐文章
      热点阅读