Scala:为什么使用`_`作为lambda表达式主体用作函数参数不起作用?

时间:2018-03-12 04:10:46

标签: scala lambda functional-programming

例如,

this.emit()

elicitSlot类型的lambda函数是否有快捷方式?

3 个答案:

答案 0 :(得分:2)

你可以使用简单的展平。

scala> val a = Set(Array(1, 2),Array(8, 9))
//a: scala.collection.immutable.Set[Array[Int]] = Set(Array(1, 2), Array(8, 9))

scala> a.flatten
//res0: scala.collection.immutable.Set[Int] = Set(1, 2, 8, 9)

scala> a.map(x => x).flatten
//res9: scala.collection.immutable.Set[Int] = Set(1, 2, 8, 9)

此处a.map(f)其中f为A => B转换功能。其他明智的类型不匹配。

答案 1 :(得分:2)

您似乎在寻找identity

val a = Set(Array(1, 2) ,Array(8, 9))

a.flatten

a.map(identity).flatten

如果你进入身份认同

@inline def identity[A](x: A): A = x

因此它与x => x的工作方式相同,无论是什么,只是按原样返回。

答案 2 :(得分:1)

由于您的标题会询问它为什么不起作用,而不仅仅是如何使其工作:错误消息告诉您。

_直接用作方法的参数时,其范围会扩展,以便a.flatMap(_)x => a.flatMap(x)。这种情况更常见:您希望println(_)始终打印<function1>吗?