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