Scala Создание объекта рекурсивно - PullRequest
0 голосов
/ 20 февраля 2020

Вот ситуация

val input = "a:b:c:d:e"

def getTrait(primary: SomeTrait, secondary: SomeTrait): SomeTrait {
...
}

def convertTrait(name: String): SomeTrait {
...
}

Так что я хочу сделать, это скользить ввод в окне 2 и построить SomeTrait на основе этого, как это

val result = getTrait(convertTrait(a),convertTrait(b))

, а затем использовать этот результат, чтобы построить другой результат, подобный этому

val resul2 = getTrait(result, convertTrait(c))

и так далее .......

Конечно, я хочу сделать это в какой-то рекурсии / для в scala, но не могу найти решение

Вот где я

val listOfList = input.split(":").grouped(2).toList



private def builder(inputList: List[List[String]], primary: SomeTrait, secondary: SomeTrait): SomeTrait = {
    for {
      xs <- inputList
      fallback = if(xs.size == 1) providerFallBackChainBuilder(convertTrait(xs(0)), "noop") else providerFallBackChainBuilder(convertTrait(xs(1)), convertTrait(xs(0)))
    } yield fallback
    FallbackConfigProvider(primary, secondary)
  }

Мне как-то нужно вернуть этот запасной вариант обратно в работу. Я знаю, что это не работает и не лучшее решение, но может кто-нибудь помочь мне о том, как правильно и правильно делать дит

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

сделал так, чтобы это работало "a:b:c:d:e".split(":").iterator.map(convertTrait).reduce ( (acc, elem) => getTrait(acc, elem) )

1 голос
/ 20 февраля 2020

Это должно то, что вам нужно.

"a:b:c:d:e".split(":").iterator.map(convertTrait).reduce(getTrait)
...