Trong Scala 2.8 có cách nào để quá tải các nhà xây dựng của một lớp vỏ không?Nhà xây dựng quá tải cho các Lớp học của Scala?
Nếu có, vui lòng đặt một đoạn trích để giải thích, nếu không, vui lòng giải thích lý do?
Trong Scala 2.8 có cách nào để quá tải các nhà xây dựng của một lớp vỏ không?Nhà xây dựng quá tải cho các Lớp học của Scala?
Nếu có, vui lòng đặt một đoạn trích để giải thích, nếu không, vui lòng giải thích lý do?
nhà xây dựng quá tải không phải là đặc biệt đối với trường hợp các lớp:
case class Foo(bar: Int, baz: Int) {
def this(bar: Int) = this(bar, 0)
}
new Foo(1, 2)
new Foo(1)
Tuy nhiên, bạn có thể muốn cũng quá tải phương pháp apply
trong đối tượng đồng hành, được gọi là khi bạn bỏ qua new
.
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
Trong Scala 2.8, thông số đặt tên và mặc định thường có thể được sử dụng thay vì quá tải.
case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)
Bạn có thể xác định hàm tạo quá tải theo cách thông thường, nhưng để gọi nó, bạn phải sử dụng từ khóa "mới".
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)
Điều đó không đúng - bạn có thể khai báo nó trong đối tượng đồng hành như bình thường –
Rất tốt :) Tôi đang tìm kiếm một cái gì đó như giá trị dự phòng trong scala, có phải mới từ 2.8? Tôi không biết :) – Felix
Có, Các thông số được đặt tên và Mặc định là mới trong Scala 2.8. – retronym
Martin Odersky giải thích lý do tại sao các phương pháp áp dụng bổ sung không được thêm tự động: http://www.scala-lang.org/node/976 –