2016-12-27 39 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

啊,所以OP试图用发电机'<-'语法上非集合(一个元组),这不是工作的正确工具 –