在 Scala 中,数组总是按引用传递,按名称调用,对吗?
所以,
def fun(ar: Array[Int]) = {}
等于
def fun(ar: => Array[Int]) = {}
谢谢。
在 Scala 中,数组总是按引用传递,按名称调用,对吗?
所以,
def fun(ar: Array[Int]) = {}
等于
def fun(ar: => Array[Int]) = {}
谢谢。
在 Scala 中,数组总是按引用传递,按名称调用,对吗?
不。在 Scala 中,就像在 Java、C、C++(默认)、C#(默认)、Smalltalk、Ruby、Python 以及几乎所有其他曾经创建的面向对象语言中一样,参数是按值传递的。
您可以显式声明一个按名称参数,然后(但仅在那时)与该参数对应的参数将按名称传递。Scala永远不会通过引用传递。
所以,
def fun(ar: Array[Int]) = {}
等于
def fun(ar: => Array[Int]) = {}
不它不是。在第一种情况下,数组(或者更确切地说是指向数组的指针)将按值传递,在第二种情况下按名称传递。在这两种情况下都不会通过引用传递。
为了进一步澄清,维基百科的以下引用可能会有所帮助:
但是,“共享呼叫”一词并不常用。不同来源的术语不一致。例如,在 Java 社区中,他们说 Java 是按值传递的,而在 Ruby 社区中,他们说 Ruby 是按引用传递的,尽管这两种语言表现出相同的语义。
对于 C++ 程序员,面对 Scala/Java 使用的术语,恕我直言,有两点可能会导致混淆: