在以下示例中,l1和l2是整数列表,我想知道为什么会产生错误?
l1.zip(l2).map(_ => { if(_._1 > _._2) 1 else 2 } )
它抱怨它错过了扩展功能的参数类型。为什么这里不允许使用下划线?
答案 0 :(得分:6)
每个人_
都会扩展到预期的输入。 nth _
被解释为 nth 参数。你会发现这个
l1.zip(l2).map(x => { if(x._1 > x._2) 1 else 2 } )
相反。或使用模式匹配
l1.zip(l2).map{case (x1,x2) => if(x1 > x2) 1 else 2}
(thx to Kigyo)
答案 1 :(得分:1)
基于理解的方法绕过了这里的核心问题,
for ( (a,b) <- l1 zip l2 ) yield { if (a > b) 1 else 2 }
和
for { (a,b) <- l1 zip l2
v = if (a > b) 1 else 2
} yield v