2011-12-03 30 views
5

thể trùng lặp:
What is the difference between scala self-types and trait subclasses?Sử dụng từ khóa này để kế thừa?

Từ example in scalatest site. Có một điều đặc biệt mà tôi không thực sự hiểu được

trait FunSuiteStackBehaviors { 
        this: FunSuite => //This line 
         def a() {} 
         def b() {} 
} 

class StackFunSuite extends FunSuite with FunSuiteStackBehaviors {} 

Theo tôi hiểu, có vẻ như họ cố gắng gán một số khiếm khuyết vào một đặc điểm. Nhưng phần this: FunSuite => làm gì? Tôi đã cố gắng sử dụng mở rộng FunSuite thay vì như

trait FunSuiteStackBehaviors extends FunSuite { 
         def a() {} 
         def b() {} 
} 

class StackFunSuite extends FunSuite with FunSuiteStackBehaviors {} 

và tôi vẫn kết thúc với cùng một kết quả. Họ là những điều tương tự ?

+0

Đó là một loại tự. http://stackoverflow.com/questions/1990948/what-is-the-difference-between-scala-self-types-and-trait-subclasses http://stackoverflow.com/questions/tagged/self-type – retronym

+0

Hmm . những câu hỏi đó không xuất hiện khi tôi cố gắng tìm kiếm. Cảm ơn bạn đã chỉ ra điều đó. –

Trả lời

0

this: FunSuite => được gọi là chú thích tự nhập. Không có gì đặc biệt về "this" Cả hai đoạn mã đều tương đương nhau. Hereis một số cuộc thảo luận về lý do cơ bản của nó. Trong chú thích loại tự ngắn giúp biểu thị compositional thiên nhiên thay vì quan hệ IS-A.

1

điều này: => XXXX được gọi là chú thích tự nhập http://www.scala-lang.org/node/124 Về cơ bản, bạn chỉ định loại "this" (đối tượng hiện tại) cho loại được chỉ định. Loại "dàn diễn viên từ bên trong"

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