Лямбда-выражения Предикат "Не" - PullRequest
0 голосов
/ 03 августа 2020

В настоящее время я собираюсь изучить Kotlin и, надеюсь, стану разработчиком, но я застрял в проблеме и не могу понять ответ (даже после обширного исследования в Google).

Было бы много признателен, если кто-нибудь может помочь мне и объяснить свое решение. :)

Заранее спасибо!

Вопрос:

"Напишите предикат, который принимает исходный предикат: (Char) -> логическую переменную и возвращает отрицательный результат. Ваш предикат предназначен для фильтрации строки. "

Реализация: val notPredicate: (Char) -> Boolean = TODO (« Обеспечить реализацию »)

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Итак, давайте сначала разберемся с проблемой.

Вы указали originalPredicate: (Char) -> Boolean, поэтому он вернет логическое значение в соответствии с символом. Например, если он вернет true для 'a', 'c', 'e', ​​et c. (просто пример), тогда вы должны вернуть false для них и true для 'b', 'd', 'f', et c.

Итак, вы хотите вызвать originalPredicate, знать результат (т.е. истина или ложь), а затем инвертировать результат и затем вернуть его.

val notPredicate: (Char) -> Boolean = { char ->
    val booleanValue = originalPredicate(char)
    return@notPredicate !booleanValue
}

Если вы упростите шаги и используйте it, которое является именем переменной по умолчанию внутри лямбда, и поскольку последний оператор в лямбде возвращается сам по себе (поэтому вам не нужно писать явный return):

val notPredicate: (Char) -> Boolean = { !originalPredicate(it) }
0 голосов
/ 03 августа 2020

Вы имеете в виду:

val originalPred :(Char) -> Boolean =  {it>'a'}
val somePred :(Char) -> Boolean =  {!originalPred.invoke(it)}

Обратите внимание, it>'a' - это просто пример.

...