Как использовать WHEN для выражения в Kotlin? - PullRequest
1 голос
/ 10 апреля 2020

Я вижу этот фрагмент в https://kotlinlang.org/docs/reference/control-flow.html

when (x) {
    parseInt(s) -> print("s encodes x")
    else -> print("s does not encode x")
}

Я запутался, интересно, первый случай - x.parseInt(s) или что-то еще.

Причина, по которой я спрашиваю, заключается в том, что я попытался выполнить следующее:

when(myString)) {
    isNullOrBlank() -> removeValue()
    else -> setValue(myString)
}

Не удалось выполнить isNullOrBlack().

Я попытался выполнить следующее. Не удалось.

when(myString)) {
    it.isNullOrBlank() -> removeValue()
    else -> setValue(it)
}

1 Ответ

0 голосов
/ 10 апреля 2020

В первом случае проверяется, равен ли x результат вызова parseInt(x), который не является функцией x.

Любой случай, который оценивается как выражение, проверяется на равенство с x. Невозможно создать случай, когда вы вызываете функцию для цели оператора when, и она проходит, если возвращает true. Ваши единственные варианты при работе с целью - проверить ее равенство, проверить, является ли она in чем-то, или проверить, является ли она is чем-то.

Чтобы сделать то, что вы пытаетесь, вам нужен оператор when без цели.

when {
    myString.isNullOrBlank() -> removeValue()
    else -> setValue(myString)
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...