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 ... )
我很想知道为什么会这样做。我觉得相当令人惊讶。