2015-03-24 72 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

相关问题