Конструктор перегрузки для классов Case Scala?
в Scala 2.8 есть ли способ перегрузки конструкторов класса?
Если да, пожалуйста, поместите фрагмент, чтобы объяснить, если нет, пожалуйста, объясните, почему?
2 ответа:
перегрузка конструкторов не является специальной для классов case:
case class Foo(bar: Int, baz: Int) { def this(bar: Int) = this(bar, 0) } new Foo(1, 2) new Foo(1)
однако, вы можете также перегрузить
apply
метод в объект-компаньон, которое вызывается, когда вы опускаетеnew
.object Foo { def apply(bar: Int) = new Foo(bar) } Foo(1, 2) Foo(1)
в Scala 2.8 именованные и стандартные параметры часто могут использоваться вместо перегрузки.
case class Baz(bar: Int, baz: Int = 0) new Baz(1) Baz(1)
вы можете определить перегруженный конструктор обычным способом, но для его вызова вам придется использовать ключевого слова "new".
scala> case class A(i: Int) { def this(s: String) = this(s.toInt) } defined class A scala> A(1) res0: A = A(1) scala> A("2") <console>:8: error: type mismatch; found : java.lang.String("2") required: Int A("2") ^ scala> new A("2") res2: A = A(2)