Scala 为什么不能在isInstanceOf支票中使用AnyVal?

Scala 为什么不能在isInstanceOf支票中使用AnyVal?,scala,Scala,我想知道,为什么AnyVal不能用于isInstanceOf check? 这种行为背后的原因是什么 scala> val c = 't' c: Char = t scala> c.isInstanceOf[AnyVal] <console>:12: error: type AnyVal cannot be used in a type pattern or isInstanceO f test c.isInstanceOf[AnyVal]

我想知道,为什么AnyVal不能用于isInstanceOf check? 这种行为背后的原因是什么

scala> val c = 't'
c: Char = t

scala> c.isInstanceOf[AnyVal]
<console>:12: error: type AnyVal cannot be used in a type pattern or isInstanceO
f test
             c.isInstanceOf[AnyVal]
scala>val c='t'
c:Char=t
scala>c.isInstanceOf[AnyVal]
:12:错误:类型AnyVal不能用于类型模式或IsInstance中
f检验
c、 isInstanceOf[AnyVal]

AnyVal
在运行时不再存在。仅在编译时。换句话说,它只是一个编译器“技巧”,将JVM原语视为一级对象。


但是,
isInstanceOf
方法是在运行时执行的,因此无法工作。因此出现了编译器错误。

相关:我想,这与可能重复的感谢有关,但提供的链接没有告诉我为什么是这样。我不想检查原语类型,我只想知道,为什么AnyVal不能使用?背景是什么?这种行为背后的规则是什么?在我看来不像是复制品。一个是问怎么做,另一个(这个)是问为什么不可能。我不确定这是丑陋还是美好。嗯,
isInstanceOf
在Scala中被认为是丑陋的;-)您应该依赖类型系统在编译时获取此类信息。我可能有点糊涂,但我不理解这个答案的逻辑。您通常不会因为答案总是“false”而拒绝布尔方法。和
1.isInstanceOf[Int]
工作正常。。。链接的“复制”的答案表明这种方法在运行时是可能的。中接受的答案依赖于隐式证据,这也在编译时得到解决。我只是尝试在
1上使用
javap
。isInstanceOf[Int]
。它依赖于装箱,并在运行时检查装箱的1是否是
java.lang.Integer
的实例。