#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")
}