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)
¿Por qué Scalac inserta una lista de parámetros vacía antes de la lista de parámetros implícita proporcionada en la declaración de clase?¿Por qué la primera lista de parámetros de una clase no puede estar implícita?
Ésta parece ser una característica, no es un error, a juzgar por el commentary in the scalac sources:
convertir // (implícita ...) a () (implícito ...) si es el único parámetro sección
Tengo curiosidad por saber por qué se hace esto. Me parece bastante sorprendente.