2010-02-08 21 views
11

Có vẻ như tôi có thể sử dụng self hoặc this để tham chiếu đến ví dụ hỗn hợp hoặc để hạn chế trường hợp hỗn hợp. Ví dụ, là những tương đương?Tự: T => và điều này: T => có cùng ý nghĩa khi xác định đặc điểm?

scala> trait A { self: List[_] => } 
defined trait A 

scala> trait B { this: List[_] => } 
defined trait B 

Đây có phải là quy ước hoặc sử dụng một cái gì đó khác với this cung cấp một số lợi ích không?

Trả lời

18

Sử dụng một tên khác hơn là "này" có thể hữu ích mà bạn có các loại thành viên đó tham khảo các ví dụ kèm theo. Ví dụ,

trait Outer { self => 
    trait Inner { 
    def outer = self 
    } 
} 

là một lợi thế để,

trait Outer { 
    trait Inner { 
    def outer = Outer.this 
    } 
} 

trong một số trường hợp.

6

Có thể là bất kỳ thứ gì: tự, cái này, meep, blah, v.v. Nó chỉ được trình biên dịch sử dụng để xác định lớp nào sẽ truyền tới (khi gọi phương thức trên đó) và không thực sự hiển thị trong bytecode.

Hãy cẩn thận khi đặt tên, vì định danh địa phương ghi đè lên nét tự loại:

trait A { 
    def baz = println("baz!") 
} 
trait B { 
    foo: A => 
    val foo = "hello" 
    // def bar = foo.baz // does not compile because foo is String, not A 
    def bar = foo.substring(1) 
} 
Các vấn đề liên quan