Tôi đã đọc một cuốn sách về Scala và có đề cập đến sửa đổi có thể xếp chồng sử dụng các đặc điểm. sửa đổi có thể xếp chồng là gì và chúng có ý nghĩa gì để sử dụng?Sửa đổi stackable là gì?
Trả lời
Chất lượng cơ bản phân biệt các thay đổi có thể xếp chồng (vì thuật ngữ được sử dụng trong scala anyway) là "siêu" bị ảnh hưởng động dựa trên cách tính trạng được trộn lẫn, trong khi siêu chung là mục tiêu được xác định tĩnh.
Nếu bạn viết
abstract class Bar { def bar(x: Int): Int }
class Foo extends Bar { def bar(x: Int) = x }
sau đó cho Foo "siêu" sẽ luôn là Bar.
Nếu bạn viết
trait Foo1 extends Foo { abstract override def bar(x: Int) = x + super.bar(x) }
Sau đó, cho rằng phương pháp siêu vẫn chưa được biết cho đến khi lớp được thực hiện.
trait Foo2 extends Foo { abstract override def bar(x: Int) = x * super.bar(x) }
scala> (new Foo with Foo2 with Foo1).bar(5)
res0: Int = 30
scala> (new Foo with Foo1 with Foo2).bar(5)
res1: Int = 50
Tại sao điều này lại thú vị? Một ví dụ minh họa có thể là một số dữ liệu mà bạn muốn nén, mã hóa và ký điện tử. Bạn có thể muốn nén sau đó mã hóa rồi ký, hoặc bạn có thể muốn mã hóa rồi ký tên rồi nén, vv Nếu bạn thiết kế các thành phần theo cách này, bạn có thể tạo một đối tượng tùy chỉnh với chính xác các bit bạn muốn sắp xếp theo cách bạn muốn.
Chỉ vì lợi ích của sự thanh lịch "đặc điểm Foo1 mở rộng Bar" thay vì "đặc điểm Foo1 mở rộng Foo"? –
Boris - bạn hoàn toàn đúng, nó chỉ được viết theo cách nó là bởi vì tôi đã thêm Bar vào phút cuối. – extempore
Tôi đã xem Real-World Scala presentation trong đó thuật ngữ sửa đổi có thể xếp chồng cũng được sử dụng. Rõ ràng đó là những đặc điểm gọi phương thức siêu khi ghi đè, về cơ bản thêm chức năng và không thay thế nó. Vì vậy, bạn tích lũy chức năng với các đặc điểm, và nó có thể được sử dụng trong Java, chúng tôi thường sử dụng các khía cạnh. Trait đóng vai trò của một khía cạnh, ghi đè các phương pháp "thú vị" và thêm các chức năng cụ thể như ghi nhật ký vv và sau đó gọi siêu và "chuyền bóng" cho đặc điểm tiếp theo trong chuỗi. HTH.
Thật tuyệt vời! – egaga
- 1. Biểu thức sửa đổi Git là gì?
- 2. Stackable Stack and Queue
- 3. "Cú pháp đã sửa đổi" trong OCaml là gì?
- 4. Công cụ sửa đổi "tĩnh" sau "nhập" nghĩa là gì?
- 5. Điểm sửa đổi "tĩnh mới" cho một hàm là gì?
- 6. Điều gì sẽ là công cụ sửa đổi đúng?
- 7. 'Sửa tên' trong Netbeans là gì?
- 8. sự khác biệt giữa Chủ đề, Công nhân, Mutex, Stackable?
- 9. C# Sửa đổi bí ẩn IEnumerable, cái gì đang sửa đổi IEnumerable của tôi?
- 10. Chức năng vimrc là gì để xác định xem bộ đệm đã được sửa đổi chưa?
- 11. Mục đích của phương pháp này để truy cập các công cụ sửa đổi là gì?
- 12. Trình sửa đổi cài đặt xây dựng trong Xcode được gọi là gì?
- 13. represention nội bộ của Java cho String là gì? Đã sửa đổi UTF-8? UTF-16?
- 14. Cách dễ nhất để đổi tên tệp bạn hiện đang chỉnh sửa trong Vim là gì?
- 15. Biểu thức chính quy Perl - Công cụ sửa đổi gc có nghĩa là gì?
- 16. Việc sử dụng tiêu đề HTTP không được sửa đổi là gì?
- 17. Không thể sửa đổi nội dung của khung nội tuyến, điều gì là sai?
- 18. Trình sửa đổi truy cập mặc định của lớp là gì?
- 19. Điều gì, trên trái đất, là tài sản được sửa đổi?
- 20. Cách thích hợp để sửa đổi bộ đệm đỉnh OpenGL là gì?
- 21. Công cụ sửa đổi được bảo vệ có nghĩa là gì?
- 22. Thứ tự đúng của việc chèn/xóa/sửa đổi trên tập dữ liệu là gì?
- 23. Công cụ sửa đổi cuối cùng làm gì trong Dart?
- 24. Sự khác biệt giữa thời gian sửa đổi tập tin và thời gian thay đổi tập tin là gì?
- 25. Trong kho lưu trữ giả tạo, sự khác biệt giữa bản sửa đổi tích hợp tệp và sửa đổi tích hợp thư mục là gì?
- 26. Trình chỉnh sửa XLIFF miễn phí tốt nhất là gì?
- 27. Trình chỉnh sửa PHP tốt nhất cho Windows là gì?
- 28. Trình chỉnh sửa tốt nhất cho AutoHotkey là gì?
- 29. Trình chỉnh sửa python tốt nhất là gì?
- 30. Sửa đổi Self, Ruby
Cuốn sách giải thích nó trong chương đặc điểm. – Rayne