在Scala中构造不可变对象时进行迭代

时间:2016-04-01 16:21:10

标签: scala for-loop immutability

我有一个我无法改变的库类:

class MultiPart {
  private val _parts: Seq[Part] = Seq.empty[Part])

  def addHead(head: Head): MultiPart = Multipart(_parts :+ head)

  def addPart(part: Part): MultiPart = Multipart(_parts :+ part)
}

在我的代码中,我想构建一个Multipart类的不可变对象,同时在for循环中进行迭代。 但我无法弄清楚如何做到这一点。 我目前的代码如下:

var mp: MultiPart = new MultiPart().addHead(head)
arrParts.foreach(x => mp.addPart(x))

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

看起来你应该使用foldLeft或foldRight(其他语言中的类似函数通常称为reduce)

arrParts.foldLeft(new MultiPart().addHead(head))(
    (list, part) => {
        list.addPart(part)
    }
)

如果您感到困惑,可以在此页面上找到一些很好的示例:http://oldfashionedsoftware.com/2009/07/30/lots-and-lots-of-foldleft-examples/