Tất cả kiểu khai báo scala chỉ là ảo ảnh. Scala được xây dựng dựa trên jvm và hoạt động như java.
Evetything là một lớp và phải độc lập với cách sử dụng của nó (java không phải là C++ và hỗ trợ xây dựng gia tăng với ưu và nhược điểm của nó). Mỗi đặc điểm có mã khởi tạo riêng của nó và lớp đa đặc điểm chạy từng mã khởi tạo tương ứng. Nếu bạn sử dụng một số AnyRef được khai báo chỉ trong một lớp con hơn giá trị của nó sẽ được đặt cho null trong khi khởi tạo.
Tôi tự bảo vệ mình bằng quy tắc quy tắc cụ thể: mọi val phải là cuối cùng hoặc lười (why using plain val in non-final classes). Vì vậy, tôi không quan tâm đến thứ tự khởi tạo và có thể giả vờ thêm rằng tôi đang sử dụng ngôn ngữ khai báo.
Ngoài ra tôi đang sử dụng tùy chọn -Xcheckinit
: Thêm kiểm tra thời gian chạy vào trường truy cập.
bạn có thể xác định u là 'lazy val' –