私は、Scalaプログラミング言語がエイリアシングの方法(同じメモリ位置に対して2つ以上の異なる参照メソッドが存在する)があるかどうかを調べようとしています。スカラーのエイリアシングの方法は?
「x:(Int、String)=(1,1)」などのエイリアシングの例を見ることができます。だから、xは2種類ありますが、同じメモリを共有していますか?
誰かがもっと説明をすることができたら大変感謝します。
私は、Scalaプログラミング言語がエイリアシングの方法(同じメモリ位置に対して2つ以上の異なる参照メソッドが存在する)があるかどうかを調べようとしています。スカラーのエイリアシングの方法は?
「x:(Int、String)=(1,1)」などのエイリアシングの例を見ることができます。だから、xは2種類ありますが、同じメモリを共有していますか?
誰かがもっと説明をすることができたら大変感謝します。
「変数」で別の変数をトラッキングするには、次のようにします。
scala> var x = 5 // create a variable
x: Int = 5
scala> def y = x // keep track of x
y: Int
scala> x = 9 // change x
x: Int = 9
scala> y // yep, y changes too
res1: Int = 9
これは本当のエイリアスではありません。 y
を変更することはできず、x
の変更を参照してください。 def
は呼び出されるたびに単に再評価されるため、y
を照会するたびに、現在の値に対してx
を再検査します。
このタイプのものはScalaの優れた習慣とはみなされないことに注意してください。ファンクショナルプログラミングでは、状態を維持するデータ構造、つまり、必要がない場合はvar
を使用しないようにしたいと考えています。
私はしません彼は参照追跡を望んでいると思う、彼は和タイプが欲しい。 –
これは型エイリアシングではなくパターンマッチングです。型エイリアシングは、 'String型'のどんな出現箇所も置き換えることができる 'Str'型の' type Str = String'です。 – cchantep
あなたは 'val ':[Int、Double] = Left(1)'のような2種類の型を格納できる 'Either'のようなものを持っていますが、' int'と 'double'はサイズが異なります彼らが同じ記憶を共有するかどうかはわかりません。 – elbaulp
"同じメモリ"が何を意味しているかによって異なりますが、Scala言語(およびJVM自体)全体がプログラマからこれらのタイプの懸念事項を取り除くことが重要なので、実際には関係ありません。メモリの割り当てはバージョンによって変わるかもしれませんが、それはうまく設計されたプログラムを破るものではありません。 – jwvh