Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以修改Scala VAL_Scala - Fatal编程技术网

可以修改Scala VAL

可以修改Scala VAL,scala,Scala,我开始使用Scala,我首先读到的是VAL是: 分配一次且永远不会更改的变量,以及变量,这些变量在其生命周期内可能会更改 但我很好奇为什么我能做到这一点: val foo = Array(1, 3 ,2) scala.util.Sorting.quickSort(foo) 如果我现在检查foo变量是否已排序,这意味着它已更改。。。另外,如果我打印(foo),两者都有相同的值,因此变量指向同一个对象(我可能认为变量只是指向一个新对象) 有人能澄清一下吗?由foo变量指向的数组正在改变,但是foo

我开始使用Scala,我首先读到的是VAL是:

分配一次且永远不会更改的变量,以及变量,这些变量在其生命周期内可能会更改

但我很好奇为什么我能做到这一点:

val foo = Array(1, 3 ,2)
scala.util.Sorting.quickSort(foo)
如果我现在检查foo变量是否已排序,这意味着它已更改。。。另外,如果我打印(foo),两者都有相同的值,因此变量指向同一个对象(我可能认为变量只是指向一个新对象)


有人能澄清一下吗?

foo
变量指向的数组正在改变,但是
foo
指向该
数组的事实没有改变。尝试重新分配
foo
,您将看到您要查找的内容。

问题不在于val,而在于数组。虽然值是不可更改的,但数组是可更改的。如果您希望停止此操作,可以使用包immutable中的类。

可以帮助您当然,我今天不太清楚,指向对象的指针不能更改,但对象的值可以更改,因此我可以设置一个foo(0)=5。Thanks@jasalguero仅供参考scala确实提供了不可变的集合