Tôi đang đọc Scala ở độ sâu bây giờ. Dưới đây là một trích đoạn từ sách:Các kiểu dự báo loại đường phụ thuộc?
Tất cả các loại phụ thuộc vào đường đều là loại dự báo. Một loại phụ thuộc vào đường dẫn
foo.Bar
được viết lại dưới dạngfoo.type#Bar
bởi trình biên dịch ...Trong Scala, tất cả các tham chiếu kiểu đều có thể được viết thành dự án chống thực thể được đặt tên. Loại scala.String là viết tắt của
scala.type#String
trong đó tênscala
dùng để chỉ góiscala
và loạiString
được xác định bởi lớpString
trên gói scala.
Rõ ràng, không có lớp scala.String
, nhưng tôi không thể tạo lại điều này với Null
.
scala> type N = scala.type#Null
<console>:7: error: type mismatch;
found : type
required: AnyRef
type N = scala.type#Null
Vì vậy, câu hỏi của tôi như sau. Các kiểu dự báo kiểu phụ thuộc vào đường dẫn? Nó chỉ là đại diện trình biên dịch bên trong hoặc có thể được thể hiện trong mã scala?
Nhưng theo SLS §3.1 'Đường dẫn là một trong những điều sau đây ... p.x trong đó p là đường dẫn và x là thành viên ổn định của p. Thành viên ổn định là gói hoặc ... Một định danh ổn định là một đường dẫn kết thúc bằng một định danh '' 'scala.Null' là số nhận dạng ổn định. Đúng? – 4e6
Không, tất cả các định danh ổn định là các giá trị hoặc gói: 'scala.Null' chỉ định một loại không phải là giá trị. 'scala' là một định danh ổn định nhưng, như bạn đã quan sát, là một gói chứ không phải là một đối tượng, hành vi của nó wrt kiểu singleton tạo thành trong toán tử' .type' khác với ví dụ 'foo' mà tôi đưa ra trong câu trả lời của mình. –
Ồ, bây giờ, cuối cùng tôi thấy đó là tất cả về hành vi '.type'. Phải mất rất nhiều thời gian để hiểu nó. Cảm ơn bạn rất nhiều :) – 4e6