鉴于此类具有implicit
Int。
scala> class Foo(implicit val x: Int) {
| def getX = x
| }
defined class Foo
我可以通过以下方式明确创建一个:
scala> val f = new Foo()(1)
f: Foo = Foo@21aba4f3
但我不能:
scala> val f = new Foo(100)
<console>:18: error: too many arguments for constructor Foo: ()(implicit x: Int)Foo
val f = new Foo(100)
()
论证发生了什么?
答案 0 :(得分:4)
只有隐式参数列表的类是具有两个参数列表的类的语法糖,第一个列是空的。
鉴于
class Foo(implicit val x: Int)
这里是使用-Xprint:type
标志在REPL中打印的扩展表示
class Foo extends scala.AnyRef {
<paramaccessor> private[this] val x: Int = _;
implicit <stable> <accessor> <paramaccessor> def x: Int = Foo.this.x;
def <init>()(implicit x: Int): Foo = {
Foo.super.<init>();
()
}
}
所以你可以不提供任何参数列表
implicit val x = 42
val foo = new Foo
或同时提供
val foo = new Foo()(42)