簡體   English   中英

Scala:為什么將`_`用作lambda表達式主體用作函數參數不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM