2012-09-25 47 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查看更新。 –