scala> def b(x:Int) = { x match { case 1 => 1; case 2 => 3.5; case k => throw new Exception("Nothing")}}
b: (x: Int)AnyVal
scala> def c(x: Int) = if (x == 1) 1 else if (x == 2) 3.5 else throw new Exception("Nothing")
c: (x: Int)Double
這是我從REPL獲得的。爲什麼scala編譯器將函數b
的返回類型視爲AnyVal
。我認爲,應該是Double
。 任何指示都會有幫助。爲什麼Int,Double和Nothing的常見超級類型是AnyVal
'雙'不是'超'的超類型 - 它們之間最具體的常見超類型是'AnyVal'。 – Lee
@這是真的,但是'Int'通常隱式轉換爲'Double'。在這種情況下,存在第三個「case」,它將拋出類型推斷。 – Dima
@迪瑪,謝謝你的幫助!我仍然想知道爲什麼'throws'子句停止隱式將'Int'轉換爲'Double'? – davidyoulanda