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

在Scala中构造不可变对象时进行迭代,scala,for-loop,immutability,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类的不可变对象,同时在

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

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))

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

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


如果您感到困惑,本页上有一些很好的例子:

您似乎想要一个
foldLeft
/
foldRight
。如果您想要它不可变,为什么不使用new
Seq[Part]
创建一个新的
多部分
arrParts.foldLeft(new MultiPart().addHead(head))(
    (list, part) => {
        list.addPart(part)
    }
)