Изменение нескольких списков внутри функции и возвращение их в Scala - PullRequest
6 голосов
/ 16 сентября 2010

У меня есть список типов [T] и [B] в scala с объектом e типа E.

Я хочу создать функцию, которая принимает эти три параметра:

def doSomething(t : List[T], b List[B], e : E) {
 ... }

Однако я понимаю, что List является неизменным, и все, что передается в функцию, рассматривается как val (не var).Но мне нужно изменить t и b и вернуть их обратно вызывающей функции.У кого-нибудь есть идеи, как это сделать?

Я не могу перейти и изменить список на массив ... Потому что я использовал его везде, и файл такой большой ..

1 Ответ

15 голосов
/ 16 сентября 2010

Вы должны модифицировать t и b функциональным способом, используя функции более высокого порядка, такие как map, filter, ... и помещать результат их в новые val с (например, modifiedT modifiedB). Затем вы можете использовать Tuple2 для возврата 2 значений из метода.

def doSomething(t: List[T], b: List[B], e: E) = {
  // somehting you want to do
  val modifiedT = t.map(...).filter(...)
  val modifiedB = b.map(...).filter(...)
  (modifiedT, modifiedB) // returns a Tuple2[List[T], List[B]]
}

В методе вызова вы можете назначить значения следующим образом:

val (t2, b2) = doSomething(t, b, e)

Конечно, это зависит от того, что вы имеете в виду под "изменить". Если эта модификация сложная штука, вы должны рассмотреть возможность использования view, чтобы сделать вычисления ленивыми, чтобы переместить время расчета на более поздний момент времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...