如何在Scala中将Option数组初始化为None

ast*_*y13 5 arrays constructor scala

我在Scala(2.9.1)中定义了一个类,如下所示:

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

   // class code here ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我想用​​它初始化时,邻居被初始化为null None.我试过这个,但是编译器抱怨错误消息"找不到:输入None":

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

   // class code here ...
}
Run Code Online (Sandbox Code Playgroud)

我可以做到这一点,它提供了所需的行为,但它似乎并不优雅:

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

   // class code here ...
}
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,最好的方法是什么?

编辑:我指的new A()是调用时的行为.

Mor*_*itz 10

最简单的方法是

Array.fill(6)(None:Option[A])
Run Code Online (Sandbox Code Playgroud)

另外,您可以更改类的构造函数以采用如下默认参数:

class A(val neighbors: Array[Option[A]] = Array.fill(6)(None))
Run Code Online (Sandbox Code Playgroud)

  • 如果`Array.fill`在`this()`构造函数中,则不需要`None`上的类型注释,因为`neighbors`的类型已经知道并且可以推断出数组的类型. (2认同)