2016-10-14 5 views
0

私は、Scalaプログラミング言語がエイリアシングの方法(同じメモリ位置に対して2つ以上の異なる参照メソッドが存在する)があるかどうかを調べようとしています。スカラーのエイリアシングの方法は?

「x:(Int、String)=(1,1)」などのエイリアシングの例を見ることができます。だから、xは2種類ありますが、同じメモリを共有していますか?

誰かがもっと説明をすることができたら大変感謝します。

+0

これは型エイリアシングではなくパターンマッチングです。型エイリアシングは、 'String型'のどんな出現箇所も置き換えることができる 'Str'型の' type Str = String'です。 – cchantep

+0

あなたは 'val ':[Int、Double] = Left(1)'のような2種類の型を格納できる 'Either'のようなものを持っていますが、' int'と 'double'はサイズが異なります彼らが同じ記憶を共有するかどうかはわかりません。 – elbaulp

+0

"同じメモリ"が何を意味しているかによって異なりますが、Scala言語(およびJVM自体)全体がプログラマからこれらのタイプの懸念事項を取り除くことが重要なので、実際には関係ありません。メモリの割り当てはバージョンによって変わるかもしれませんが、それはうまく設計されたプログラムを破るものではありません。 – jwvh

答えて

1

「変数」で別の変数をトラッキングするには、次のようにします。

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を使用しないようにしたいと考えています。

+0

私はしません彼は参照追跡を望んでいると思う、彼は和タイプが欲しい。 –

関連する問題