gpt4 book ai didi

functional-programming - Kotlin 不同类型的 reduce() 函数

转载 作者:行者123 更新时间:2023-12-03 19:05:02 24 4
gpt4 key购买 nike

我正在查看数组扩展函数,发现 reduce()

inline fun <S, T: S> Array<out T>.reduce(operation: (acc: S, T) -> S): S {
if (isEmpty())
throw UnsupportedOperationException("Empty array can't be reduced.")
var accumulator: S = this[0]
for (index in 1..lastIndex) {
accumulator = operation(accumulator, this[index])
}
return accumulator
}

这里是 accumulator类型变量 S分配了类型为 T 的数组中的第一个元素.

无法理解 reduce() 的真实用例两种数据类型的函数。这里的合成示例实际上没有任何意义。
open class A(var width: Int = 0)
class B(width: Int) : A(width)

val array = arrayOf(A(7), A(4), A(1), A(4), A(3))
val res = array.reduce { acc, s -> B(acc.width + s.width) }

似乎这个函数的大多数现实生活用例都使用这个签名:
inline fun <T> Array<out T>.reduce(operation: (acc: T, T) -> T): T

你能帮忙提供一些例子,其中 reduce()函数对不同类型很有用。

最佳答案

下面是一个例子:

interface Expr {
val value: Int
}

class Single(override val value: Int): Expr

class Sum(val a: Expr, val b: Expr): Expr {
override val value: Int
get() = a.value + b.value
}

fun main(args: Array<String>) {
val arr = arrayOf(Single(1), Single(2), Single(3));
val result = arr.reduce<Expr, Single> { a, b -> Sum(a, b) }
println(result.value)
}

关于functional-programming - Kotlin 不同类型的 reduce() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50887291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com