scala - scala for 循环中 val 的不良行为

标签 scala

我正在执行下面的 Scala 代码,它成功执行,没有任何编译时错误,并且还给出了下面给出的输出:

 val a = 0;
 val numList = List(1,2,3,4,5,6);

 // for loop execution with a collection
 for( a <- numList ){
     println( "Value of a: " + a );
 }

输出:

Value of a: 1                                                                                                                                                                   
Value of a: 2                                                                                                                                                                   
Value of a: 3                                                                                                                                                                   
Value of a: 4                                                                                                                                                                   
Value of a: 5                                                                                                                                                                   
Value of a: 6

我的问题是,如果a的类型是val,那么在for循环中为什么a的值会得到循环的每次迭代中都会发生变化,并且 a 接受这些更改的值并打印?

最佳答案

for 循环中使用的 a 是一个不同的变量,它遮蔽了外部 a

查看两个变量不同的一种方法是在循环后打印 a 的值。它仍然包含初始值(在您的情况下为 0)。

 val a = 0;
 val numList = List(1,2,3,4,5,6);

 // for loop execution with a collection
 for( a <- numList ){
     println( "Value of a: " + a );
 }

 println("After the loop, a = " + a)

输出:

Value of a: 1                                                                                                                                                                   
Value of a: 2                                                                                                                                                                   
Value of a: 3                                                                                                                                                                   
Value of a: 4                                                                                                                                                                   
Value of a: 5                                                                                                                                                                   
Value of a: 6
After the loop, a = 0

请注意,内部的 a 也是一个 val(而不是 var)。在每次迭代中,都会使用 numList 元素初始化一个名为 a 的新 val

关于scala - scala for 循环中 val 的不良行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40860218/

相关文章:

scala - Scala Slick如何将Scala代码转换为JDBC?

Scala pipelines - 用于构建 DAG 工作流程的 DSL

scala - 修改列表中条件为真的元素

function - 我为这些条件做些什么来遵循 FP?

scala - 使用 Scala 2.10 `to` 将列表转换为 SortedMap

scala - 定义一个结合其他一阶函数的一阶函数

scala - 何时使用 Option/None 返回类型

python - 如何在 Databricks 的 PySpark 中使用 Scala 创建的 DataFrame

scala - 使用 Slick 进行递归树状表查询

scala - 有没有一种简单的方法可以用 Dotty 编译一个 sbt 项目?