【发布时间】:2017-03-11 20:19:24
【问题描述】:
如果我用 3 调用它,我会按预期返回一个 Int 类型的返回值。
def determineKind( a:Int ):Any = {
if( a < 5 )
a.toInt
else if(a<50)
a.toLong
else if(a<100)
a.toFloat
else
a.toDouble
}
如果我用 3 调用它,我会得到一个 Double。
def determineKind2( a:Int ):Any = {
val aResult = { if( a < 5 )
a.toInt // Execution flows here
else if(a<50)
a.toLong
else if(a<100)
a.toFloat
else
println("Oops!") // Never executed--yet I get a Double back!
a.toDouble
}
aResult
}
为什么?我不想要双份。 (真正的函数使用了一个 match/case 块,它似乎也将这些数字类型中的任何一个转换为 Double。)
在代码块中包装一些东西会触发不需要的类型更改为 Double。
为什么会这样?
【问题讨论】:
-
你期望的类型是什么?
-
aResult与match语句具有相同的类型。match语句可以返回Int、Long、Float或Double之一。 Double 是集合中最宽、最通用的类型,因此它是整个表达式的结果类型。
标签: scala