Scala数型模式匹配
我有一个类型为Number的字段,有人能告诉我为什么下面的代码不起作用以及如何优雅地修复它吗Scala数型模式匹配,scala,Scala,我有一个类型为Number的字段,有人能告诉我为什么下面的代码不起作用以及如何优雅地修复它吗 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.Do
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")
}
不过,我不会说这有什么优雅之处,而且在不知道您想用它做什么的情况下,很难提出任何进一步的建议。您似乎在使用
java.lang.Number
,而scala浮点文本不是java.lang.Number
的子类型。好吧,当我这样做时,它会起作用,n match>{case d:Number if d.isInstanceOf[Double]=>println(d)}关于OP的评论,是否对isInstanceOf[Double]
进行了一些转换,使其返回true
?@SotiriosDelimanolis自动装箱,我想。也就是说,scala.Double
被装箱到java.lang.Double
。