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