scala – Option.fold – 为什么它的第二个参数不是二元运算符?
我确信这是有充分理由的,但我没有看到它.
折叠(比如)列表返回
它与foldLeft和foldRight有明显的关系,它们做同样的事情但是定义了顺序(因此不需要关联运算符) 折叠选项返回
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值作为种子,但是你的合理种子值和当选项为空时的合理值可能会大不相同. 正如有人所指出的,对于不同的结构,你需要不同的元素(例如树木),因为减少的“合理”应用具有不同的结构. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |