как принять значение изменения в цикле scala

#scala

#scala

Вопрос:

Я не могу изменить значение val в цикле в scala, я пытаюсь написать небольшую функцию, подобную этой

 def replicate(s:Any,n:Int):List[Any] = {
    val i = 0
    var list = s::Nil
    for i<-1 to n {
       list::=s
    }
    return list 
}
  

Но использование этой функции возвращает только один элемент в списке (например, когда n = 3)
Как это исправить?

Комментарии:

1. Если это упражнение по изучению функционального программирования, изучите рекурсию.

2. Я удивлен, что вы вообще получаете какие-либо выходные данные, поскольку опубликованный вами код фактически не компилируется. Стоит отметить, что хорошая практика Scala почти никогда не используется return (это редко требуется), использование var s также избегается, и всякий раз, когда вы видите type Any , это довольно хороший признак того, что дела идут плохо.

3. этот код даже не компилируется…

4. val являются immutable ссылками. Это означает, что вы не можете переназначить a val .

Ответ №1:

Существует более простой способ выполнить вашу задачу

 def replicate(s:Any,n:Int):List[Any] = (1 to n) map (_=> s) toList
  

Пример:

 replicate("omg", 4)
List[Any] = List(omg, omg, omg, omg)
  

Комментарии:

1. Еще проще: List.fill(n)(s) ( Стандартная библиотека полна скрытых сокровищ.)

Ответ №2:

 def replicate(s:Any,n:Int):List[Any] = {
    val i = 0
    var list = s::Nil
    for (i<-1 to n) {
       list::=s
    }
    return list 
}
  

и я получаю

 scala> replicate("lol", 5)
res0: List[Any] = List(lol, lol, lol, lol, lol, lol)