Scala Fold Left с двумя типами параметров - PullRequest
0 голосов
/ 03 марта 2019

Как я могу преобразовать эту базовую функцию func2 в сгиб слева в Scala?

Вот итерационный подход.Я использую две функции.

def func1(list1: List[foo], item: bar): List[foo] = {  
    does something to the list and returns it  
}

def func2(list1: List[bar]): List[foo] = {
    var newList = List[foo]() // starts with an empty list

    for (item <- list1){ //cycle through list
        newList = func1(newList, item)
    }
    return newList;
}

Я хочу перебирать элементы списка по элементам.Запустите его через функцию для каждого элемента и установите результат этой функции в список.

Затем продолжайте работу через функцию и используйте новый список (аккумулятор) в качестве списка. Я использую вызов функции следующей итерации.

Я попытался сделать это:

def func2(list1: List[bar]): List[foo] = {    
    var newList = list1.foldLeft( (List[foo]() )(list1) => {return func1(_,_) } );

Но это не сработало.Я знаю, что я близко, но синтаксис неправильный.Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 03 марта 2019

Я думаю, это все, что вам нужно.

def func2(list1 :List[Bar]) :List[Foo] =
  list1.foldLeft(List.empty[Foo])(func1)

Вы не хотите использовать return.Обычно это не нужно, а иногда и делает то, чего вы не ожидаете.

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