我有一个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