我有一個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
我有一個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
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")
}
我不會說有什麼高雅的這一點,雖然,這很難進行任何進一步的建議,不知道你想用它做什麼。
關於OP的評論,是否有一些轉換完成'isInstanceOf [雙]'這將讓它返回'true'? – 2015-03-25 00:00:16
@SotiriosDelimanolis Autoboxing,我認爲。也就是說,'scala.Double'被裝箱到'java.lang.Double'。 – 2015-03-25 00:04:29
您似乎在使用'java.lang.Number',而scala浮點文字不是'java.lang.Number'的子類型。 – 2015-03-24 23:48:34
嗯,這樣做,當我這樣做,n匹配{案件d:數字,如果d.isInstanceOf [雙] => println(d)} – 2015-03-24 23:50:04