在辅助构造函数中使用隐式参数调用Scala类的主构造函数

时间:2014-06-04 08:09:29

标签: scala

包含编译错误的类定义:

class Foo(implicit x : Int) {
  def this(s : String) = this(s.length)
}

并且类定义可以通过编译

class Foo(implicit x : Int) {
  def this(s : String) = this()(s.length)
}

从我的角度来看,第一个定义是正确的。 由于辅助构造函数显式调用了将Integer作为参数的主构造函数,因此似乎没有错。 对于通过编译的第二类定义,实际上我并不完全理解为什么会有效。

1 个答案:

答案 0 :(得分:1)

在Scala中,每个辅助构造函数必须调用与其第一个操作相同的类的另一个构造函数。

此外,您没有具有Int参数的构造函数。 您的构造函数具有implicit(Int)参数。 您可以在范围中提供隐式参数,也可以明确地将其传递给this()(9)

相关问题