首页 > 解决方案 > Scala 强调 lambda 中的用法

问题描述

我在弄清楚下面代码的差异时遇到了问题。

  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)

.

  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)

不应该_b行为相同吗?

标签: scala

解决方案


使用下划线的等价物b => "" + v1 + b就是"" + v1 + _.

_ => "" + v1 + _而是等效于_ => (b => "" + v1 + b)or a => (b => "" + v1 + b)


推荐阅读