immutableな木を作る
immutableな木を作りたかったのでやってみた。
immutableなノードは、作った時点で自身のデータ(name)と子ノード(children)が確定している必要があるということなのであった。
import scala.collection.mutable.ArrayBuffer class BuilderNode(val name :String) { val children=ArrayBuffer[BuilderNode]() def add(child :BuilderNode)={ children+=(child) child } def result :Node={ new Node(name, children.map{_.result}.toArray) } } class Node(val name :String, val children :Array[Node]) extends Traversable[Node] { override def toString="<Node %s>".format(name) def foreach[B](f: Node => B){ children.foreach{ child => f(child) child.foreach(f) } } } object App { def main(args :Array[String]){ val builder=new BuilderNode("root") val japan=builder.add(new BuilderNode("Japan")) japan.add(new BuilderNode("Tokyo")) japan.add(new BuilderNode("Kyoto")) val ussr=builder.add(new BuilderNode("USSR")) ussr.add(new BuilderNode("Moscow")) val root=builder.result root.foreach{println(_)} } }