可以通过引用来调用Scala吗?

roy*_*yco 20 scala calling-convention evaluation-strategy

我知道Scala支持来自ALGOL的call-by-name,我想我明白这意味着什么,但Scala可以像C#,VB.NET和C++那样通过引用进行调用吗?我知道Java不能通过引用进行调用,但我不确定这种限制是否仅仅是由于语言还是JVM.

当您想要将大量数据结构传递给方法但是您不想复制它时,这将非常有用.在这种情况下,按引用调用似乎是完美的.

Rex*_*err 46

Java和Scala都只使用值调用,除了该值是基元或指向对象的指针.如果你的对象包含可变字段,那么这与通过引用调用之间几乎没有实质性区别.

由于您总是将指针传递给对象而不是对象本身,因此您不必重复复制巨型对象.

顺便提一下,Scala的名称调用是使用call by value实现的,值是一个(指向a)指针的函数对象,它返回表达式的结果.

  • 说Scala只使用call by value会使语言与其实现混淆.如果我们去汇编程序,那么所有语言都只能按值调用.Scala _could_支持JVM上的call-by-reference,就像创建容器对象以传递引用或原语一样,然后在调用返回后从该容器读回. (11认同)
  • 好吧,假设你想改变一个变量`x`.你可以把它作为`int*x`传递给它.在Scala中,你将有一个类保存该变量:`class X(var x:Int)`.现在,如果将该类传递给某个方法,它可以更改`x`的值. (2认同)