scala> class A(implicit a: Int);
defined class A
scala> class B()(implicit a: Int);
defined class B
scala> new A()(1)
res1: A = [email protected]
scala> new B()(1)
res2: B = [email protected]
scala> new A(1)
<console>:7: error: too many arguments for constructor A:()(implicit a: Int)A
new A(1)
Dlaczego Scalac wstawia pustą listę parametrów przed niejawną listą parametrów podaną w deklaracji klasy?Dlaczego pierwsza lista parametrów klasy nie może być niejawna?
To wydaje się być cechą, a nie błąd, sądząc po commentary in the scalac sources:
// konwersji (niejawny ...) do () (niejawny ...), jeżeli jego jedynym parametr sekcja
Jestem ciekawy, dlaczego tak się dzieje. Uważam, że jest to dość zaskakujące.