Trong Java, họ đã cố gắng để giải quyết vấn đề này một phương pháp clone
, mà hoạt động bằng cách gọi clone
trong tất cả các siêu lớp, nhưng điều này thường được coi là bị hỏng và tránh tốt nhất, vì những lý do bạn có thể tra cứu (ví dụ: here). Vì vậy, trong Scala, một cách tổng quát trong Java, bạn sẽ phải tạo phương thức sao chép của riêng bạn cho một lớp tùy ý, điều này sẽ cho phép bạn chỉ định những thứ như sao chép sâu và nông của các trường.
Nếu bạn đặt lớp học là case class
, bạn sẽ nhận được phương thức copy
miễn phí. Nó thực sự tốt hơn, bởi vì bạn có thể cập nhật bất kỳ trường nào cùng một lúc:
case class A(n: Int)
val a = A(1) // a: A = A(1)
val b = a.copy(a.n) // b: A = A(1)
val c = a.copy(2) // c: A = A(2)
Tuy nhiên kế thừa từ trường hợp các lớp học bị phản đối.
Nguồn
2011-11-10 20:45:10
Lưu ý rằng bạn không cần tạo bản sao nếu bạn giữ đối tượng không thay đổi. –