scala:初始化不可变对象的数组

时间:2015-07-10 10:34:59

标签: scala

    class x(x:int){val y=x}

    class z {
        val grid= Array.ofDim(8,8)
    }

该对象是否已初始化?  当我尝试在循环中初始化

    for(i<-0 until 8;j<-0 until 8) grid(i)(j)=new x(someValue)

我收到错误:空指针异常

3 个答案:

答案 0 :(得分:2)

val grid = Array.fill(8, 8) { new X(1) }

一样使用Array.fill

答案 1 :(得分:1)

您可以使用Array.fill

Array.fill(8, 8)(myValue)

或者您可以将toArray与嵌套for理解结合使用:

{  
  for { 
    i <- 0 until 8 
  } yield { for { 
    j <- 0 until 8 
  } yield myValue 
}.toArray }.toArray

同样,您可以将toArraymap

一起使用
(0 until 8).map { _ => (0 until 8).map { _ => myValue }.toArray }.toArray

您也可以使用这些方法的某些组合:

Array.fill(8){ { for(_ <- (0 until 8)) yield myValue }.toArray }

答案 2 :(得分:0)

根据定义,数组在Scala中是可变的。它们本质上是Java阵列,增强了很多Scala的酷收集API。

您遇到的主要问题是Array缺少类型参数化。通过指定Array类型为[X],以下代码对我来说非常有用:

class X(x:Int){val y=x}

class Z {
   val grid= Array.ofDim[X](8,8)
   for(i<-0 until 8;j<-0 until 8) grid(i)(j)=new X(2)
}