很多时候,我希望创建范围为 if 语句的变量。一些计算只与特定的“if”语句有关——用临时变量污染外部范围很难闻。
我想做的事:
val data = (whatever)
if (val x = data*2+5.4345/2.45; val y = data/128.4; x*y < 10)
x * y
else
x * 2
println(x) //ERROR!
一种替代方案相当困惑:
val data = (whatever)
if (data*2+5.4345/2.45*data/128.4 < 10)
data*2+5.4345/2.45*data/128.4
else
data*2+5.4345/2.45 * 2
我试图避免的明显替代方案:
val data = (whatever)
val x = data*2+5.4345/2.45
val y = data/128.4
if (x*y < 10)
x*y
else
x * 2
println(x) //OK
这样的事情在 Scala 中可能吗?有没有体面的解决方法?如果不是,还有哪些其他语言支持这样的想法?
最佳答案
您可以使用模式匹配:
val data = 123
val (result, x) = (data*2+5.4345/2.45, data/128.4) match {
case (x, y) if x * y < 10 => (x * y, x)
case (x, _) => (x * 2, x)
}
println(x)
result
包含 x * y
的结果或 x * 2
,取决于运行的计算和 x
包含 data*2+5.4345/2.45
的值如预期的。
关于scala - If 语句范围的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8845402/