scala> class A(implicit a: Int);
defined class A
scala> class B()(implicit a: Int);
defined class B
scala> new A()(1)
res1: A = A@159d450
scala> new B()(1)
res2: B = B@171f735
scala> new A(1)
<console>:7: error: too many arguments for constructor A: ()(implicit a: Int)A
new A(1)
Scalac が、クラス宣言で提供される暗黙のパラメーター リストの前に空のパラメーター リストを挿入するのはなぜですか?
scalac ソースのコメントから判断すると、これはバグではなく機能のようです。
// (implicit ... ) を ()(implicit ... ) に変換 (それが唯一のパラメータ セクションの場合)
なぜこれが行われるのか知りたいです。むしろ驚くべきことだと思います。