2012-09-25 55 views
1

訪問值如何調用一個方法或訪問一個參數通配符的價值?例如。在這個例子中,我想找到所有F對象的最大「rev」值。斯卡拉:調用方法/ on參數通配符

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)} 
            ^

回答

1

這裏不能使用通配符,需要提供姓名的論點:

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

注意,這將是,如果你有服用1個論點,而不是math.max功能foo相同: foo(_.rev)foo(x => x.rev)相同,而不是x => foo(x.rev)

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

+0

但這會不行嗎?根據Scala規範,多個通配符被第一個參數,第二個參數,第三個參數等替代...上面的代碼例如在'math.max(_,_)' –

+1

@Sven查看更新。 –