環境
- Mac OSX Version 10.9.2
- sbt 0.13.1
- scala 2.10.3
実装
- specs2のソースコードから一部抜粋
case class Chain(list: List[Int]) {
def withNewElement(e: Int): Chain = this.copy(list = (list.to[ListBuffer] += e).toList)
}
def fold(chain: Chain, list: List[Int]): Chain = {
list match {
case Nil => chain
case x :: xs => fold(chain.withNewElement(x), xs)
}
}
val chain = Chain(List(1, 2, 3))
val newChain = fold(chain, List(4, 5, 6))
def e1 = newChain must_== Chain(List(1, 2, 3, 4, 5, 6))