Intereting Posts
kotlin неразрешенная ссылка KDoc, но IntelliJ не любит импорт, который его исправляет Применение преобразования к каждому элементу в Single <List <T >> Переключение между классами фрагментов в Котлине Как аргумент Default и @JvmOverloads работают над Kotlin? Поплавковый примитив магически становится 0 при использовании для запуска PointF или RectF в Kotlin Android Модуль библиотеки Android Kotlin экспортируется с плагином gradene maven-publish, не добавляющим зависимости Правильно ли написана документация Котлина? Не удается разрешить символ kotlinOptions (в сборке Gradle) Наблюдаемое значениеLatestFrom IntelliJ Idea при тестировании сразу нескольких модулей включаются только артефакты из одного модуля Gson и сериализация массива объектов с наследованием Когда я должен использовать let {} и когда просто просто! = Null Как создать экземпляр объекта с использованием значений параметров конструктора по умолчанию в Kotlin? В Kotlin, как передать параметр, чтобы асинхронная область сохранила его? Как сделать multiconditional для цикла в kotlin

Как работать с foldRight () в Котлине?

Я пробую этот код

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

Я думал, что он работает как 0 + 4 – 2 – 1 = 1. Но он возвращает 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

если я не получу что-то неправильно