簡體   English   中英

Scala:在參數通配符上調用方法/訪問值

[英]Scala: Calling method/accessing value on argument wildcard

如何在通配符上調用方法或訪問通配符的值? 例如,在此示例中,我想找到所有F對象的最大“ rev”值。

scala> case class F(rev:Long)
defined class F

scala> List(F(1),F(2),F(3))
res3: List[F] = List(F(1), F(2), F(3))

scala> res3.foldLeft(0L){math.max(_,_.rev)}
<console>:11: error: wrong number of parameters; expected = 2
              res3.foldLeft(0L){math.max(_,_.rev)}
                                    ^

您不能在此處使用通配符,而需要為參數指定名稱:

res3.foldLeft(0L){(x,y) => math.max(x,y.rev)}

請注意,如果您有一個函數foo接受1個參數而不是math.max ,它將是相同的: foo(_.rev)foo(x => x.rev)相同,而不是x => foo(x.rev)

問題是通配符的范圍。 math.max(_,_.rev)擴展為(我認為) x => math.max(x, y => y.rev) 由於此函數只有一個參數,因此會出現此錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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