10

Tại sao tất cả các lớp Scala kế thừa từ ScalaObject mặc dù đặc điểm đó hoàn toàn trống và không có chức năng (hiển thị?) So với AnyRef, xác định phương pháp bổ sung nào?Tại sao `ScalaObject` tồn tại?

Sẽ không phải cuộc gọi phương thức chậm lại như equals() hoặc hashCode() vì nó sẽ cần phải cân nhắc một lớp khác (có thể ghi đè phương pháp)?

Không thể gấp AnyRef và ScalaObject thành một lớp?

CẬP NHẬT: ScalaObject was eradicated bằng phiên bản 2.10 mới của Scala.

Trả lời

11

ScalaObject chèn phương thức $tag, theo ý kiến ​​trong library source code for 2.7, "là cần thiết để tối ưu hóa biểu thức khớp mẫu khớp với các hàm tạo của các kiểu chữ." Kể từ khi tên bắt đầu với $, tất nhiên nó nên được coi là "ẩn" đối với người lập trình ứng dụng. Trong Scala 2.8, nó hoàn toàn trống rỗng, vì vậy tôi đoán nó có khả năng tương thích ngược.

+0

Tại sao phương thức thẻ $ đó không được chèn vào AnyRef? – soc

+0

Tương thích lạc hậu, tôi đoán vậy. (Mở rộng câu trả lời của tôi sau khi tải xuống và đọc mã nguồn 2.8.) –

+0

Tôi đã grepped thông qua các mã trình biên dịch và có một số mã để xử lý nó một cách đặc biệt (tập tin 'Global.scala'), nhưng không có giải thích tại sao nó ở đó. –

4

Nó cũng tạo một móc tiện dụng để phân tích tĩnh. Ví dụ, hãy tưởng tượng bạn có một công cụ có thể tìm kiếm thông qua một cơ sở mã (được biên dịch hay không), và cho bạn biết rằng bạn có thể cải thiện một số chỉ số liên kết/ghép/cân bằng lớp/những gì bạn có bằng cách trích xuất một đặc điểm từ các lớp học và tạo một chuyển đổi tiềm ẩn cho các lớp đó. Công cụ này sẽ chỉ báo cáo một cách hợp lý các đặc điểm có thể được trích xuất một cách có lợi từ các lớp thừa hưởng ScalaObject, trong khi báo cáo các chuyển đổi tiềm ẩn sinh lời từ bất kỳ lớp Java nào. Công cụ tương tự sẽ báo cáo về bất kỳ trả về "null" có thể từ các lớp con ScalaObject (nơi Option hoặc tương tự thường là một lựa chọn tốt hơn), trong khi bỏ qua các trả về null từ các lớp Java.

7

Điều phối phương pháp không kết nối cấu trúc thừa kế lớp tìm kiếm triển khai. Trình biên dịch xây dựng một bảng điều phối phương thức net cho mỗi lớp phản ánh dòng ghi đè net/phương thức thừa kế của nó. Đó là một trong những đức tính của việc giải quyết tất cả các kiểu gõ.

Các vấn đề liên quan