为什么我无法在我的 kotlin repl 中使用这个简单的代码

问题描述 投票:0回答:1

我收到这个错误 -----

error: incompatible types: IntRange and Int
3..12 -> print("Good fish name")

var fishName = "anyname"
when (fishName.length){
0 -> print("Error")
3..12 -> print("Good fish name")
else -> {
print("OK fish name")
} 
}

我期待能够打印出消息“Good fish name”

kotlin range read-eval-print-loop
1个回答
0
投票

A

when
构造正在比较论证
fishName.length
,这是一个
Int
when
构造中的每个值。第一个
0
是一个
Int
,但是
3..12
是一个
IntRange
;每个都必须是平等测试的
Int

这里有三种解决方案:

传递

Int
s...

    when (fishName.length){
        0 -> print("Error")
        3,4,5,6,7,8,9,10,11,12 -> print("Good fish name")
        else -> {
            print("OK fish name")
        }
    }

或使用此替代形式,将零测试也更改为范围:

    when (fishName.length){
        in 0..0 -> print("Error")
        in 3..12 -> print("Good fish name")
        else -> {
            print("OK fish name")
        }
    }

更新 来自@gidds - “Kotlin 让你可以将单个值……与谓词混合”:

    when (fishName.length){
        0 -> print("Error")
        in 3..12 -> print("Good fish name")
        else -> {
            print("OK fish name")
        }
    }

https://kotlinlang.org/docs/control-flow.html#when-expression

© www.soinside.com 2019 - 2024. All rights reserved.