2011-08-31 29 views
9

Đặc biệt có nghĩa là chúng cung cấp cho bạn chức năng không thể có được nếu không, vì vậy chúng xử lý bằng trình biên dịch theo cách đặc biệt. Ví dụ: 'DelayedInit' - chuyển đổi tất cả mã init thành phương thức chính, 'Động' - proxy của tất cả các phương thức, v.v.Tôi có thể tìm danh sách tất cả các đặc điểm đặc biệt ở Scala ở đâu?

+0

Một điểm nhỏ: DelayedInit là "kỳ diệu" đặc điểm, ứng dụng chỉ sử dụng nó. –

+0

'App' chỉ là" huyền diệu "vì lý do hiệu suất liên quan đến việc tối ưu hóa các nhà xây dựng trên JVM. Bạn có thể dễ dàng tạo ra đặc điểm thực thi của riêng bạn bằng cách cho nó một phương thức 'main (args: Array [String])': xem ví dụ về đặc điểm 'Application' (không được chấp nhận). –

Trả lời

12

Hiện tại, các đặc điểm duy nhất mà tôi biết là DelayedInitDynamic.

Bất cứ điều gì thừa kế từ những đặc điểm này cũng được xử lý đặc biệt bởi trình biên dịch, như với App, phân lớp DelayedInit.

Cần lưu ý rằng bất kỳ đặc tính nào có thể được sử dụng làm điểm đánh dấu bởi một số plugin thư viện, khung hoặc trình biên dịch để "cung cấp cho bạn chức năng không thể nhận khác". Đây là hai đặc điểm duy nhất được nhận dạng đặc biệt bởi mặc định là compiler mặc dù là.

Cũng như đặc điểm đánh dấu, có một số chú thích mà có được đối xử đặc biệt, các scala.annotationscala.reflect là những nơi tốt để tìm những, cũng có những @specialized chú thích trong gói scala và một số trong plugin trình biên dịch (như continuations delimited) .

10

Ngoài ra còn có scala.Singleton.

Đây là final trait và không thể sử dụng bình thường khi viết mã, nhưng mọi người sử dụng một số singleton như object Foo đã sử dụng nó gián tiếp.

Singleton được sử dụng bởi trình biên dịch để mở rộng một singleton, do đó:

scala> object Foo 
defined module Foo 

scala> Foo.isInstanceOf[Singleton] 
res0: Boolean = true 
Các vấn đề liên quan