Iteration in konstruierendem pattern-matching?

Hallo,

ich habe folgende Baumstruktur:


Container
|
--- Item
|
--- Container
|     |
|     --- Item
|
--- Item

Nun möchte ich mit konstruierendem Pattern-Matching einen String erstellen, der die Baumstruktur ausgibt. Meine Frage ist nun, wie ich es hinkriege, dass im Falle eines Containers durch die gesamte children Liste iteriert wird und auf jedes Element wieder die treeToString() Methode aufgerufen wird.

Mein bisheriger Code:


package de.***.inv

import scala.collection.mutable.LinkedList

abstract class Element(parName: String, parWeight: Float) {
	
	def name() = parName
	def weight() = parWeight
	
	var parent: Container = null
	
	def treeToString(e: Element): String = {
		e match {
			case e: Item      => e name
			case e: Container => 
		}
	}
	
	def setParent(newParent: Container) {
		parent = newParent
	}
	
	def getParent() = parent
	
}

case class Item(parName: String, parWeight: Float) extends Element(parName, parWeight)

case class Container(parName: String, parWeight: Float, parCapacity: Float) extends Element(parName, parWeight) {
	
	def capacity() = parCapacity
	
	var children: LinkedList[Element] = LinkedList[Element]()
	
	def addChild(newChild: Element) {
		children.+:(newChild)
		newChild setParent this
	}
	
}

Bin noch ziemlicher Noob in Scala, trotz jahrelanger Java-Erfahrung… Aber egal, Scala ist irgendwie anders, trotz gleichen Bytecodes.

PS: Gibt es einen Scala-Codetag?

MfG
Turakar

Ich habe es jetzt nicht ausprobiert, aber es sollte (zumindest im Prinzip) so gehen:


	def treeToString(): String = {
		this match {
			case e: Item      => e.name()
			case e: Container =>  e.children.map(_.treeToString()).mkString("[", ",", "]")
		}
	}

Werde ich morgen testen, danke schonmal!

Klappt, danke!