1

メソッドを呼び出したり、ワイルドカード引数の値にアクセスするにはどうすればよいですか? たとえば、この例では、すべての 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)}
                                    ^
4

1 に答える 1

1

ここではワイルドカードを使用できず、引数に名前を付ける必要があります。

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

: is the same as and notのfoo代わりに 1 つの引数を取る関数があった場合も同じであることに注意してください。math.maxfoo(_.rev)foo(x => x.rev)x => foo(x.rev)

問題は、ワイルドカードの範囲です。math.max(_,_.rev)に展開します (私は思う) x => math.max(x, y => y.rev)。この関数にはパラメーターが 1 つしかないため、このエラーが発生します。

于 2012-09-25T09:31:18.930 に答える