在Scala中的apply()函数给出编译错误?

ful*_*ead 4 arrays scala compilation

嘿,我有以下代码:

var z:Array[String] = new Array[String](4);
z(0) = "Dave"; 
z(1) = "Joe";
z(2) = "Jim";
z.apply(3) = "Roger";
Run Code Online (Sandbox Code Playgroud)

这里的最后一行是给出一个编译时错误说 - "类Array中缺少方法的参数;如果要将它作为部分应用的函数处理,请使用`_'跟随此方法"

这对我来说没有意义,因为我已经读过,当你将一个或多个值的括号应用于变量时,Scala会将代码转换为对该变量名为apply的方法的调用.所以,如果以下行:

z(2) = "Jim";
Run Code Online (Sandbox Code Playgroud)

转换为

z.apply(2) = "Jim";
Run Code Online (Sandbox Code Playgroud)

然后为什么行

z.apply(3) = "Roger";
Run Code Online (Sandbox Code Playgroud)

给我一个编译时错误?

我是Scala的新手,所以任何帮助都会非常感谢!

Arc*_*heg 7

这个电话:

z(2) = "Jim";
Run Code Online (Sandbox Code Playgroud)

获取翻译为

z.update(2, "Jim")
Run Code Online (Sandbox Code Playgroud)

apply 尝试分配值时不起作用.

更新

你可以自己检查一下.在控制台中运行:scala -print,然后键入val ar = Array(1, 2, 3)

然后,当您键入下一行时ar(2) = 5,它将显示生成的代码.它有点复杂(解释器为了它自己的目的添加了很多东西),但你可以找到这个(或类似的)行:

    $line3.iw.ar().update(2, 5);
Run Code Online (Sandbox Code Playgroud)