如何在Kotlin中使用foldRight()?

时间:2017-10-30 11:10:12

标签: kotlin

我试试这段代码

        println(listOf(1, 2, 4).foldRight(0) { total, next ->
            total - next
        })

我认为它的作用类似于0 + 4 - 2 - 1 = 1。 但它返回3.为什么? 对不起这个愚蠢的问题。

1 个答案:

答案 0 :(得分:3)

foldRight的工作原理是从右到左累积结果。在你的情况下,它会做

(1 - (2 - (4 - 0)))=(1 - (2 - 4))= 1 - ( - 2)= 3

请注意,您的操作的参数顺序错误,foldRight会将下一个元素作为第一个参数传递给您,将累加器作为第二个参数传递给您。见https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/fold-right.html。如果你交换它们,你会有

(((0-4)-2)-1)= - 7

除非我出错了