Как инициализировать массив параметров в Scala в None - PullRequest
5 голосов
/ 28 ноября 2011

Я определил класс в Scala (2.9.1) следующим образом:

class A(val neighbors: Array[Option[A]]) {
   def this() = this(new Array[Option[A]](6))

   // class code here ...
}

Моя проблема в том, что соседи инициализируются с нулями, когда я хотел бы, чтобы он был инициализирован с None.Я пробовал это, но компилятор жалуется с сообщением об ошибке «not found: type None»:

class A(val neighbors: Array[Option[A]]) {
   def this() = this(new Array[None](6))

   // class code here ...
}

Я могу сделать это, что дает желаемое поведение, но это не выглядит очень элегантно:

class A(val neighbors: Array[Option[A]]) {
   def this() = this(Array(None, None, None, None, None, None))

   // class code here ...
}

Итак, мой вопрос: каков наилучший способ сделать это?

РЕДАКТИРОВАТЬ: я имею в виду поведение, когда вызывается new A().

Ответы [ 2 ]

10 голосов
/ 28 ноября 2011

Самый простой способ сделать это будет

Array.fill(6)(None:Option[A])

Кроме того, вы можете изменить конструктор вашего класса так, чтобы он принимал параметр по умолчанию, например:

class A(val neighbors: Array[Option[A]] = Array.fill(6)(None))
2 голосов
/ 28 ноября 2011

Может, вот так?

def this() = this(Array.fill(6) {Option.empty})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...