Для этого можно использовать List.fill
. Первый список параметров этого метода имеет много перегрузок переменной длины и представляет количество элементов на каждом уровне вложенности. Второй аргумент является элементом для заполнения:
List.fill(1, 1)(1) //List(List(1))
List.fill(1, 2, 3)(4) //List(List(List(4, 4, 4), List(4, 4, 4)))
полное определение метода вы ищете не очень хорошо подходят и Scala, потому что возвращаемый тип будет наименьший общий супер тип List[Int]
, List[List[Int]]
, List[List[List[Int]]]
и т. Д.), Который будет Any
или List[Any]
в зависимости от вашего определения fun(1, 0)
. Это будет выглядеть примерно так:
def fun(init: Int, level: Int): Any = level match {
case 0 => init
case n => List(fun(init, level - 1))
}
Но это на самом деле не рекомендуется, и будет считаться unidiomatic в большинстве сред Scala.
Вы только что полностью изменили свой вопрос, поэтому я вернул ваши изменения. Пожалуйста, задайте другой вопрос, хотите ли вы его полностью изменить? –