3
我有这段代码在科特林(我开始学习)工作:“模式匹配”不适合诠释条款(分公司)
package io.shido.learning
import java.time.Instant
fun typeCheck(any: Any): Any = when (any) {
(any is Int && any < 10) -> "(small) integer"
is Int -> "integer"
is Double -> "double"
is String -> "string"
else -> "another Any"
}
fun main(args: Array<String>) {
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
。
有没有人有任何见解?第一个分支是true
,实际上是5
。
我使用IDEA,当我计算表达式'(任何数据类型为int &&任何<10 )''''它是'true';另一方面,如果我从'when'表达式中删除'any',它就可以工作,但是我必须在分支中每一次都重复'any''(这是我试图通过使用'when )')。 –
......它变得更“有趣”;如果我只是在你的第一个解决方案中添加“when(any)”时......没有任何作用说它是另一个任何*任何*值!所以它看起来像'any'参数和'when'中的'any'是“不一样的”......这不可能是真的。 –
当然'(任何是Int &&任何<10)''5'是'true',但'true'与'5'不匹配,所以第一个分支不会评估。 – IRus