scala - If 语句范围的变量

标签 scala

很多时候,我希望创建范围为 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/

相关文章:

scala - Scala 中的::和::: 有什么区别

java - 将包含泛型的java代码转换为scala

swing - 如何在 Scala 的 Swing 表中嵌入(工作)按钮?

java - 如何使用 Numeric scala 类型?

scala - Scala中的参数化数据类型

scala - 根据可选参数值过滤列表

scala - 增强 Scala 中的预定义方法

scala - 显示目录名称和文件架构的 Json 架构

scala - 如何通过 Scala 反射获得可用的隐式?

scala - 如何将值元组与函数元组结合起来?