Возврат из `buildSequence` в Котлине - PullRequest
0 голосов
/ 21 мая 2018

Я использую функцию buildSequence в Kotlin.Как мне закончить итерацию в середине функции?Я ищу что-то похожее на оператор C # yield break.

Мой код выглядит примерно так:Я застрял на TODO.

fun foo(list:List<Number>): Sequence<Number> = buildSequence {
    if (someCondition) {
        // TODO: Bail out early with an empty sequence
        // return doesn't seem to work....
    }

    list.forEach {
        yield(someProcessing(it))
    }
}

РЕДАКТИРОВАТЬ

Видимо, я неправильно диагностировал источник.Проблема не возвращается из функции buildSequence.Следующее работает для меня:

fun foo(list:List<Number>): Sequence<Number> = buildSequence {
    return@buildSequence

    list.forEach {
        yield(someProcessing(it))
    }
}

РЕДАКТИРОВАТЬ 2

Проблема заключается в том, что я поместил return в локальную вспомогательную функцию, которая проверяет данные в нескольких точкахв buildSequence (отсюда и вспомогательная функция).По-видимому, я не могу вернуться с buildSequence в рамках вспомогательной функции.Сообщение об ошибке не очень помогло ...

1 Ответ

0 голосов
/ 21 мая 2018

Просто используйте return@buildSequence, который помечен return от лямбда , тогда как немаркированный return будет означать «возврат из функции foo».

См.также: Что означает «вернуть @»?

...