“模式匹配”不适用于Int子句(分支)

我在Kotlin有一段代码(我开始学习):

package io.shido.learning import java.time.Instant fun typeCheck(any: Any): Any = when (any) { (any is Int && any  "(small) integer" is Int -> "integer" is Double -> "double" is String -> "string" else -> "another Any" } fun main(args: Array) { println("type check for: 5 (${typeCheck(5)})") println("type check for: 20 (${typeCheck(20)})") println("type check for: 56.0 (${typeCheck(56.0)})") println("type check for: \"a string\" (${typeCheck("a string")})") println("type check for: Instant (${typeCheck(Instant.now())})") } 

…所以我期待typeCheck(5)返回(small) integer而不是目前的integer

有没有人有任何见解? 第一个分支确实是5

在这里输入图像说明

当你传递一个参数when检查参数是否与分支中的值匹配,以及5不匹配when是否在第一个分支中计算为true 。 所以基本上你可以这样修复你的代码:

 fun typeCheck(any: Any): Any = when { (any is Int && any < 10) -> "(small) integer" any is Int -> "integer" any is Double -> "double" any is String -> "string" else -> "another Any" } 

要么

 fun typeCheck(any: Any): Any = when (any) { in 0..10 -> "(small) integer" is Int -> "integer" is Double -> "double" is String -> "string" else -> "another Any" } 

请参阅何时expression