为什么Array.减少必须返回子类?

  • 本文关键字:返回 子类 Array kotlin
  • 更新时间 :
  • 英文 :


如果我正确阅读类型签名,Array.reduce必须返回数组中项目类型的子类?这似乎是一个完全武断和不必要的限制?

inline fun <S, T : S> Array<out T>.reduce(
operation: (acc: S, T) -> S
): S

来源为什么不能是一个任意的类呢?

fun main(params: Array<String>) {
val args = params.reduce(Args(), {accum: Args, arg: String -> accum.parse(arg) })
}

实际上正好相反:返回类型必须是数组中数据的超类型,而不是子类型。我不认为这和可变性有任何关系。

原因是在第一次迭代中,数组中的第一项成为累加器。因此,如果数组包含整数,但累加器是String类型,则第一步是不可能的。

fold()的工作方式不同:它接收累加器的初始值作为参数,所以它可以是任何类型。

这是因为Array.reduce为非突变还原。对于突变还原,您需要使用Array.fold

相关内容

  • 没有找到相关文章

最新更新