试过这个:
scala> 2.isInstanceOf[AnyVal]
<console>:8: error: type AnyVal cannot be used in a type pattern or isInstanceOf test
2.isInstanceOf[AnyVal]
^
和此:
scala> 12312 match {
| case _: AnyVal => true
| case _ => false
| }
<console>:9: error: type AnyVal cannot be used in a type pattern or isInstanceOf test
case _: AnyVal => true
^
这条消息非常有用。我知道我不能使用它,但我该怎么办?
答案 0 :(得分:16)
我假设你想测试某些东西是否是原始值:
def testAnyVal[T](x: T)(implicit evidence: T <:< AnyVal = null) = evidence != null
println(testAnyVal(1)) // true
println(testAnyVal("Hallo")) // false
println(testAnyVal(true)) // true
println(testAnyVal(Boolean.box(true))) // false
答案 1 :(得分:12)
我认为您的类型实际上是Any
,或者您已经知道它是否为AnyVal
。不幸的是,当你的类型是Any
时,你必须分别测试所有基本类型(我在这里选择了变量名来匹配基元类型的内部JVM名称):
(2: Any) match {
case u: Unit => println("Unit")
case z: Boolean => println("Z")
case b: Byte => println("B")
case c: Char => println("C")
case s: Short => println("S")
case i: Int => println("I")
case j: Long => println("J")
case f: Float => println("F")
case d: Double => println("D")
case l: AnyRef => println("L")
}
这样可行,打印I
,并且不会给出不完整的匹配错误。