Scala强调lambda中的用法

kar*_*jan 0 scala

我在解决以下代码差异时遇到了问题.

  val l1 = List('a', 'b')
  val l2 = List(1, 2, 3, 4)
  val x = l1.flatMap(v1 => l2.map(b => "" +  v1 + b))
  print(x)
//List(a1, a2, a3, a4, b1, b2, b3, b4)
Run Code Online (Sandbox Code Playgroud)

.

  val l1 = List('a', 'b')
  val l2 = List(1, 2, 3, 4)
  val x = l1.flatMap(v1 => l2.map(_ => "" +  v1 + _))
  print(x)
//List(One$$$Lambda$13/398887205@1554909b, One$$$Lambda$13/398887205@6bf256fa, One$$$Lambda$13/398887205@6cd8737, One$$$Lambda$13/398887205@22f71333, One$$$Lambda$13/398887205@13969fbe, One$$$Lambda$13/398887205@6aaa5eb0, One$$$Lambda$13/398887205@3498ed, One$$$Lambda$13/398887205@1a407d53)
Run Code Online (Sandbox Code Playgroud)

不应该_b表现一样吗?

Ale*_*nov 5

相当于b => "" + v1 + b使用下划线只是"" + v1 + _.

_ => "" + v1 + _而是等同于_ => (b => "" + v1 + b)a => (b => "" + v1 + b).