上下文非常简单。我的假设基于 Odersky 的书“Scala 编程,第 2 版”,第 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
我的问题是:为什么我会收到不太明确的情况并出错,但是当我通过减少“简化”来绘制函数时,它会正确执行?
感谢您对此提供的任何见解。