2016-10-23 7 views
1

Markと呼ばれるタイプと、nullに初期化された4つの変数があります。彼らが宣言されているとおり複数のオブジェクトを一度に初期化する

var markA: Mark = _ 
var markB: Mark = _ 
var markC: Mark = _ 
var markD: Mark = _ 

現在、私はこの方法でそれらを初期化しています:

markA = new Mark() 
markB = new Mark() 
markC = new Mark() 
markD = new Mark() 

記述することなく、繰り返し「=新しいマークを()」それらすべてを初期化するための正しい方法は何ですか?私は、メソッド内で、次の

List(markA,markB,marcC,mardD).foreach(_ = new Mark()) 

ような何かをしようとしていた。しかし、コンパイラは、これは理にかなっているのvalに再割り当てされることを私に警告します。一度にすべてをどのように初期化できますか?

+0

私はマクロで騙された同様の質問です。 http://stackoverflow.com/questions/19601429/can-tuples-only-be-unpacked-at-variable-declarations –

答えて

1
var markA, markB, markC, MarkD = new Mark() 

それぞれにマークの新しいインスタンスを割り当てます。 など。 mutable.Mapと、それは、あなたが2つの段階に宣言と初期化を区切ることができます一覧/配列内の変数を格納するための許容可能な場合

scala> var a,b,c = collection.mutable.Map("a"->1) 
a: scala.collection.mutable.Map[String,Int] = Map(a -> 1) 
b: scala.collection.mutable.Map[String,Int] = Map(a -> 1) 
c: scala.collection.mutable.Map[String,Int] = Map(a -> 1) 

scala> a += ("b"->1) 
res1: scala.collection.mutable.Map[String,Int] = Map(b -> 1, a -> 1) 

scala> a 
res2: scala.collection.mutable.Map[String,Int] = Map(b -> 1, a -> 1) 

scala> b 
res3: scala.collection.mutable.Map[String,Int] = Map(a -> 1) 

scala> c 
res4: scala.collection.mutable.Map[String,Int] = Map(a -> 1) 
+0

私がそれを宣言した場所で初期化したい場合はうーん、それはうまくいかない投稿宣言を初期化するときに動作します。 "markA、markB、markC、MarkD = new Mark()"は、IDEが最初の3つの変数を無駄な式として識別するようにします。ほとんど同じことをする方法はありますか? – sudom82

1

宣言:

var marks = Array.fill[Mark](4)(null) 

初期化します。

marks = marks map (x => new Mark) 
+0

'var marks = Array.fill [Mark](4)(null)' – jwvh

+0

これははるかに優れています!ありがとう!あなたのコメントに応じて更新されました:) –

関連する問題