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)
Why does Scalac insert an empty parameter list before the implicit parameter list provided in the class declaration?
This seems to be a feature, not a bug, judging by the commentary in the scalac sources:
// convert (implicit ... ) to
()(implicit ... ) if its the only
parameter section
I'm curious to know why this is done. I find it rather surprising.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…