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 など、これまでに作成されたほとんどすべてのオブジェクト指向言語と同様に、引数は値によって渡されます。
by-name-parameterを明示的に宣言すると、(その場合のみ) そのパラメーターに対応する引数が名前で渡されます。Scala は決して参照渡しをしません。
そう、
def fun(ar: Array[Int]) = {}
に等しい
def fun(ar: => Array[Int]) = {}
いいえそうではありません。最初のケースでは、配列 (または配列へのポインター) は値で渡され、2 番目のケースでは名前で渡されます。どちらの場合も、参照によって渡されません。
さらに明確にするために、ウィキペディアからの次の引用が役立つかもしれません:
ただし、「共有による呼び出し」という用語は一般的に使用されていません。用語は、さまざまなソース間で一貫性がありません。たとえば、Javaコミュニティでは、Javaは値渡しであると言われていますが、Rubyコミュニティでは、2つの言語が同じセマンティクスを示していても、Rubyは参照渡しであると言われています。
C ++プログラマーの場合、Scala / Javaで使用される用語に直面すると、混乱を招く可能性のある2つのポイントがあります。