оператор » когда` с несколькими аргументами в Kotlin

#kotlin #conditional-statements

Вопрос:

 data class Vehicle(val name: String, val category: String,val subCategory: String, val region: String)

fun main() {
    val newVehicle = Vehicle("Mitsubishi","Saloon", "Mini", "Kenya")
    val newVehicle2 = Vehicle("Mitsubishi 2","Saloon 2", "Mini 2", "Kenya 2")
    when(newVehicle.name || newVehicle.region) {
        "Mitsubishi 2" -> {
            print("Is Mitsubishi 2")
        }
        "Kenya" -> {
            print("Is Kenya")
        }
    }
}
 

Рассмотрим приведенный выше блок кода, возможно ли иметь несколько аргументов, чтобы избежать повторных проверок условий для обоих Vehicle.name и Vehicle.region ? Это не удается с ошибкой: Type mismatch: inferred type is String but Boolean was expected

Комментарии:

1. Что бы when(newVehicle.name || newVehicle.region) это значило? Чего вы ожидаете от кода здесь? Пожалуйста, укажите ваши ожидаемые результаты.

2. Или еще лучше: перепишите код так, чтобы он компилировался , используя повторные проверки для обоих Vehicle.name и Vehicle.region , чтобы мы точно знали, что вы пытаетесь сделать. Тогда мы сможем попытаться избавиться от повторения.

3. @Sweeper Я хотел бы, чтобы условие было проверено по двум аргументам, скажем, если neVehicle.name == "Mitsubishi 2" ИЛИ newVehicle.region == "Mitsubishi 2" затем напечатать для этого случая или /выполнить блок.

4. Тогда вы можете просто использовать это как выражение. Убедитесь, что любое выражение, которое вы помещаете в when блок, должно возвращать логическое значение. Код, который вы опубликовали выше, не

5. Каков именно ваш вариант использования? Чего вы хотите этим добиться?

Ответ №1:

Вы всегда можете сделать следующее, но, честно говоря, я не уверен when , что условие-это то, что вам нужно для вашего варианта использования:

 val namesAndRegions = listOf(newVehicle.name, newVehicle.region)
when {
    "Mitsubishi 2" in namesAndRegions -> print("Is Mitsubishi 2")
    "Kenya" in namesAndRegions -> print("Is Kenya")
}