访问for中的列表列表

时间:2017-01-01 13:04:04

标签: scala

我在scala中有以下一些代码无效:

 var tacTable : List[List[TACList]] = List(List())

  def gen(p: Program) = {
    for (i <- 0 to p.classes.length){
      for (j <- 0 to p.classes(i).methods.length){
        var tacInstr = new TACList()
        tacTable(i)(j) = tacInstr //error: application does not take parameters
      }
    }
  }

显然,这与我使用j访问列表并且j用于...的事实有关...我该如何解决这个问题?

为方便起见,您可以使用另一个给出相同错误的示例:

var l : List[List[Int]] = List(List(1,2),List(3,4))
for (i <- 0 to l.length) {
  for (j <- 0 to l.length) {
    l(i)(j) = 8
  }
}  

2 个答案:

答案 0 :(得分:1)

列表是不可变的。 试试这个:

 val tacTable  = p.classes.map { _.methods.map { _ =>
     new TACList()
 }

答案 1 :(得分:1)

因为我不能在最初的帖子上评论这里的旁注:

在scala for-understanding中你可以在一个单独的for中使用多个生成器。所以你使用的嵌套是没有必要的,因为你可以使用它:

for (i <- 0 to l.length; j <- 0 to l.length) {
  // your code
}

此外,这似乎不适用于您的情况,但如果您有一个平面映射结果,您应该使用for comprehension的yield而不是body中的变异