Scala:调用方法/访问参数通配符上的值

时间:2012-09-25 09:03:11

标签: scala 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)}
                                    ^

1 个答案:

答案 0 :(得分:1)

您不能在此处使用通配符,并且需要为参数指定名称:

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

请注意,如果您的函数foo使用1个参数而不是math.max,那么它将是相同的:foo(_.rev)foo(x => x.rev)相同而不是{{1 }}

问题在于通配符的范围。 x => foo(x.rev)扩展为(我认为)math.max(_,_.rev)。由于此函数只有一个参数,因此会出现此错误。