2016-12-27 4 views
1

Почему этот код работает:Путаница параметров в List.foldRight() в Скале

val list = List(('a', 2), ('b', 2)) 

    val first = list.foldRight(List[List[(Char, Int)](List())) { 
    case ((char, num), acc) => 
     (for (
     elem <- acc; 
     i <- 0 to num 
    ) yield (char, i) :: elem) 
    } 

где, как это не делает:

val second = list.foldRight(List[List[(Char, Int)]](List())) { 
    (elem, acc) => 
     (for (
     elem1 <- acc; 
     (char, num) <- elem; // ERROR: value filter is not a member of (Char, Int) 
     i <- 0 to num 
    ) yield (char, i) :: elem1) 
    } 

ли я не делать то же самое в обоих, просто в разных местах?

ответ

3

Вместо генератора, использовать связывание для разложения вашего кортежа внутри для выражения переменной в середине потока:

for (
    elem1 <- acc; 
    (char, num) = elem; 
    i <- 0 to num 
) yield ... 
+0

Ааа, так О.П. пытается использовать генератор '<-' синтаксис на не-коллекции (один кортеж), который не является правильным инструментом для работы –

 Смежные вопросы

  • Нет связанных вопросов^_^