Scala,数组总是按名称调用,对吧?

use*_*311 1 arrays scala pass-by-reference

在Scala中,数组总是通过引用传递,按名称调用,对吧?

所以,

def fun(ar: Array[Int]) = {}
Run Code Online (Sandbox Code Playgroud)

等于

def fun(ar: => Array[Int]) = {}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Jör*_*tag 8

在Scala中,数组总是通过引用传递,按名称调用,对吧?

在Scala中,就像Java,C,C++(默认情况下),C#(默认情况下),Smalltalk,Ruby,Python以及几乎所有其他面向对象语言一样,参数都是通过值传递的.

可以显式声明一个by-name-parameter,然后(但只有这样)对应于该参数的参数将按名称传递.Scala 永远不会通过引用传递.

所以,

def fun(ar: Array[Int]) = {}
Run Code Online (Sandbox Code Playgroud)

等于

def fun(ar: => Array[Int]) = {}
Run Code Online (Sandbox Code Playgroud)

不它不是.在第一种情况下,数组(或更确切地说是指向数组的指针)将按值传递,在第二种情况下按名称传递.在任何情况下都不会通过引用传递.