2012-06-17 33 views
5

我在想,爲什麼AnyVal不能用於isInstanceOf檢查? 這種行爲背後的原因是什麼?爲什麼AnyVal不能用於isInstanceOf檢查?

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] 
+0

相關:http://stackoverflow.com/questions/10416658 –

+0

我想,這也是相關http://www.scala-lang.org/node/3271 –

+0

可能重複的[如何測試一個值上成爲AnyVal?](http://stackoverflow.com/questions/10416658/how-to-test-a-value-on-being-anyval) –

回答

11

AnyVal在運行時不再存在。僅在編譯時。換句話說,它只是一個編譯器「把戲」,將JVM基元視爲第一類對象。

但是,isInstanceOf方法在運行時執行,所以它不能工作。因此編譯器錯誤。

+0

我不確定這是醜還是不錯。 –

+1

那麼''isInstanceOf'在Scala中被認爲是醜陋的;-)你應該依靠類型系統在編譯時獲得這樣的信息。 – paradigmatic

+0

我可能很厚,但我不明白這個答案的邏輯。你通常不會僅僅因爲答案總是「假」就禁止布爾方法。並且'1.isInstanceOf [Int]'可以正常工作......並且鏈接「複製」的答案表明這種方法在運行時是可能的。 –

相關問題