Underscore notation abbreviates anonymous functions when Scala can infer their parameter types. Each underscore introduces and references a new unnamed parameter in left-to-right order. section 3.3.2
Replacing named parameters
The function (x, y) => x + y can become _ + _. Other examples include _ * 2, _.head, and _ drop _. In foldRight, productViaFoldRight(ns) uses _ * _ as its combining function. section 3.3.2
Use the shorthand when parameters occur simply and once. Prefer ordinarily named parameters when nested expressions such as foo(_, g(List(_ + 1), _)) make scope or correspondence difficult to read. section 3.3.2
