2015-03-24 76 views
2

我有一個Number類型的字段,有人能告訴我爲什麼下面的代碼不工作,以及如何優雅地修復它。Scala Number type pattern matching

val n:Number = 10.0 
n match { 
    case d:Double=>println(d) 
} 

error: pattern type is incompatible with expected type 
+0

您似乎在使用'java.lang.Number',而scala浮點文字不是'java.lang.Number'的子類型。 – 2015-03-24 23:48:34

+0

嗯,這樣做,當我這樣做,n匹配{案件d:數字,如果d.isInstanceOf [雙] => println(d)} – 2015-03-24 23:50:04

回答

7

Scala的Double是不一樣的java.lang.Double,這是一個子類的java.lang.Number,所以它永遠不可能匹配。它可以如果你對陣java.lang.Double

val n: Number = 10.0 

n match { 
    case d: java.lang.Double => println(d) 
    case _ => println("Not a Double") 
} 

我不會說有什麼高雅的這一點,雖然,這很難進行任何進一步的建議,不知道你想用它做什麼。

+0

關於OP的評論,是否有一些轉換完成'isInstanceOf [雙]'這將讓它返回'true'? – 2015-03-25 00:00:16

+0

@SotiriosDelimanolis Autoboxing,我認爲。也就是說,'scala.Double'被裝箱到'java.lang.Double'。 – 2015-03-25 00:04:29

相關問題