我编写了以下代码,用于查找与键对应的值并将其返回为Double。
def getDouble (key: String, map: HashMap[String, _]) : Double = {
if (map contains key) {
val o = map get key
o match {
case Some(i: Int) => return i.asInstanceOf[Int].toDouble;
case Some(d: Double) => return d.asInstanceOf[Double];
case Some(s: String)
=> return augmentString(s.asInstanceOf[String]).toDouble;
case Some(int) => return o.asInstanceOf[Int].toDouble;
case Some(double) => return o.asInstanceOf[Double].toDouble;
case _ => return -1234567.00;
}
}
else {
return -1234567.00
}
}
case Some(int)
和case Some(i: Int)
之间的区别是什么?
我是否需要同时使用case Some(int)
和case Some(i: Int)
来检查类型int?
答案 0 :(得分:3)
Some(int)
匹配任何Some
,并从int
的内容声明名为Any
的{{1}}变量。 Option
只是一个标识符,而不是类型。因此,例如int
将与它匹配,并在您尝试将其作为Some("String")
返回时抛出异常。
Int
仅在Some(i:Int)
为int时匹配,并声明类型为o
的名为i
的变量。这意味着在这种情况下您不需要Int
,因为它已经是asInstanceOf
。
您想要的代码是:
Int
删除
def getDouble (key: String, map: HashMap[String, _]) : Double = {
val o = map get key
o match {
case Some(i: Int) => i.toDouble;
case Some(d: Double) => d;
case Some(s: String) => augmentString(s).toDouble;
case _ => -1234567.00;
}
}
s。正确匹配类型使它们不必要,并且它们通常被认为是不好的做法。asInstanceOf
检查,因为如果它未被包含,它将返回map contains key
,None
抓住。{/ li>
case _ =>
s。由于return
是函数中的最后一个,因此它自己的值将自动成为返回值。