【问题标题】:What the difference between filterOrElse and filterOrOther from Arrow?来自 Arrow 的 filterOrElse 和 filterOrOther 有什么区别?
【发布时间】:2019-02-15 20:10:31
【问题描述】:

我找不到filterOrElsefilterOrOther 之间的区别

签名 filterOrElse

inline fun <A, B> EitherOf<A, B>
.filterOrElse(predicate: (B) -> Boolean, default: () -> A): Either<A, B>

filterOrOther

inline fun <A, B> EitherOf<A, B>
.filterOrOther(predicate: (B) -> Boolean, default: (B) -> A): Either<A, B>

我看到的不同之处在于 filterOrOther 有一个参数 B 用于 default lambda。

默认值:(B) -> A 与默认值:() -> A

但我认为有两个不同的功能还有另一个原因。是什么原因?它们之间有什么区别?

【问题讨论】:

  • 根据文档,这确实是唯一的区别。

标签: kotlin functional-programming arrow-kt


【解决方案1】:

如果predicate 的结果是falsefilterOrOther 让您可以选择使用该参数B 来生成AdefaultfilterOrElsedefault 只是一个生产者,它不使用B 来生成A

【讨论】:

  • 换句话说,这正是我在问题中所说的吗?
  • 基本上是的。重要的是要注意predicate 中使用的参数Bdefault 中使用的参数相同。至于一个原因,我说过你可以使用filterOrElse 来保护自己(和/或更大项目中的其他同事)免于在default lambda 中引入由B 引起的奇怪/骇人听闻的副作用。你是在说“只在predicate 中使用B,在default 中使用B 对于 来说是个坏主意”。
猜你喜欢
  • 2016-06-23
  • 2019-05-01
  • 2017-03-30
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多