次のことがうまくいかない理由はありますか?
implicit def listExtensions[A](xs : List[A]) = new ListExtensions(xs)
class ListExtensions[A](xs : List[A])
{
def foreach[B](f: (A, Int) => B)
{
var i = 0;
for (el <- xs)
{
f(el, i);
i += 1;
}
}
}
var a = List(1, 2, 3);
a foreach { (el, i) => println(el, i) };
これを fsc 2.8.1 でコンパイルすると、次のエラーが表示されます:「パラメーターの数が間違っています。予期される = 1: a foreach { (el, i) => println(el, i) };」。私は何か間違ったことをしているのですか、それとも単に「私のライブラリをポン引きする」トリックによってオーバーロードされたメソッドを追加する方法がありませんか?
PS foreach の iterate-with-current-index フレーバーの実装についてではなく (zipWithIndex メソッドを認識しています)、オーバーロードと暗黙の変換がどのように連携するかについて疑問に思います。