gpt4 book ai didi

scala - 为什么在代码块中包装值会将我键入的数字更改为 double 值?

转载 作者:行者123 更新时间:2023-12-04 17:25:45 25 4
gpt4 key购买 nike

如果我用 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
}

为什么?我不要双标。 (real 函数使用 match/case block ,它似乎也将任何这些数字类型转换为 Double。)

有关将内容包装在代码块中的一些事情会触发不需要的类型更改为 Double。

这是为什么?

最佳答案

你的问题在于你如何有效地定义 if block ,在 determineKind2 中,a.toDouble 总是分配给 aResult 并且if block 的整个结果被丢弃。

正在发生的事情的例证:

def block = {
if(condition)
v1
else
println(v2)
v2
}

总是返回 v2。发生这种情况是因为使用显式花括号的相同代码将是这样的:

def block = {
if(condition) {
v1
} else {
println(v2)
}
v2
}

注意 v2 如何在 if block 之外。另一方面,如果语句 block :

condition match {
case true => v1
case _ =>
println(v2)
v2
}

上面并没有发生同样的情况,case 中的 block 以相同范围深度的另一个 case 的开始结束。

附带说明:缩进对 block 的编译方式没有任何影响。

关于scala - 为什么在代码块中包装值会将我键入的数字更改为 double 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40313560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com