[英]Scala: why using `_` as a lambda expression body to be used as a function argument does not work?
例如,
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.flatMap(_)
<console>:9: error: missing parameter type for expanded function ((x$1) => a.flatMap(x$1))
a.flatMap(_)
^
scala> a.flatMap(x=>x)
res4: scala.collection.immutable.Set[Int] = Set(1, 2, 8, 9)
x=>x
類型的lambda函數是否有快捷方式?
您可以使用簡單的拼合。
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
轉換函數。 其他明智類型不匹配。
看來您正在尋找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
相同,無論返回的結果如何。
由於您的標題詢問了為什么它不起作用,而不僅僅是問如何使它起作用:錯誤消息告訴您。
當_
直接用作方法的參數時,其范圍會擴大,因此a.flatMap(_)
為x => a.flatMap(x)
。 這通常更有用:您是否希望println(_)
始終打印<function1>
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.