Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala数型模式匹配_Scala - Fatal编程技术网

Scala数型模式匹配

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

我有一个类型为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.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