2016-10-23 2 views
1

У меня есть тип, называемый Mark, и 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() 

Что это правильный путь, чтобы инициализировать их все без написания «= новый Mark()» несколько раз? Я пытался сделать что-то вроде следующего внутри метода

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

Но компилятор предупреждает меня, что это переназначение на вал, который имеет смысл. Как я могу их инициализировать сразу?

+0

Подобный вопрос, где я обманывал макрос. http://stackoverflow.com/questions/19601429/can-tuples-only-be-unpacked-at-variable-declarations –

ответ

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

Присвойте каждому новому экземпляру Марка. . с mutable.Map

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 идентифицировать первые три переменные как бесполезное выражение. Есть ли способ сделать что-то почти то же самое, но после объявления? – sudom82

1

Если это приемлемо для хранения переменных в списке/Array, вы можете отделить объявление и инициализацию в 2 этапа:

заявляют:

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

инициализации:

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

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

+0

Это намного лучше! Благодаря! Обновлено в соответствии с вашими комментариями :) –

Смежные вопросы