其背景非常简单。我的假设基于 Odersky 的书“Programming in Scala, 2nd Edition”,第 8.5 节描述了“占位符语法”。
我有一个 List[List[Boolean]] (即矩形位图),我试图在其中计算值“true”的总出现次数。这是定义执行良好的数据的 REPL 行:
val rowsByColumns =
List( List(false, true, false)
, List(true, true, true)
, List(false, true, false)
)
接下来,我尝试使用以下行来计算“true”的出现次数。我没有执行,而是收到一个错误:
val marks = (for(row <- rowsByColumns)
yield {row.foldLeft[Int](0)(_ + (if (_) 1 else 0))}).sum
<console>:8: error: wrong number of parameters; expected = 2
val marks = (for(row <- rowsByColumns) yield {row.foldLeft[Int](0)(_ + (i
f (_) 1 else 0))}).sum
^
我不明白这个错误,因为我有两个下划线代表函数的参数。因此,我通过编写执行得很好的代码来使该函数更加明确:
val marks = (for(row <- rowsByColumns)
yield {row.foldLeft[Int](0)((sum, marked) => sum + (if (marked) 1 else 0))}
).sum
我的问题是:为什么我会收到不太明确的情况的错误,但是当我通过减少“简化”来映射函数时,它会正确执行?
感谢您就此问题向我提供的任何见解。