N ツリー データ構造からウィジェットのリストを返そうとしています。私の単体テストでは、それぞれが 1 つの依存関係を持つ約 2000 個のウィジェットがある場合、スタック オーバーフローが発生します。私が考えているのは、for ループが原因でツリー トラバーサルが末尾再帰にならなくなっていることです。これをscalaで書くより良い方法は何ですか? これが私の機能です:
protected def getWidgetTree(key: String) : ListBuffer[Widget] = {
def traverseTree(accumulator: ListBuffer[Widget], current: Widget) : ListBuffer[Widget] = {
accumulator.append(current)
if (!current.hasDependencies) {
accumulator
} else {
for (dependencyKey <- current.dependencies) {
if (accumulator.findIndexOf(_.name == dependencyKey) == -1) {
traverseTree(accumulator, getWidget(dependencyKey))
}
}
accumulator
}
}
traverseTree(ListBuffer[Widget](), getWidget(key))
}