2014-09-10 25 views
2
/** A marker indicating that a `java.lang.Runnable` provided to `scala.concurrent.ExecutionContext` 
* wraps a callback provided to `Future.onComplete`. 
* All callbacks provided to a `Future` end up going through `onComplete`, so this allows an 
* `ExecutionContext` to special-case callbacks that were executed by `Future` if desired. 
*/ 
trait OnCompleteRunnable { 
    self: Runnable => 
} 

當我在scala中查看Future的源代碼時,我無法理解爲什麼self:Runnable =>上面編譯。 我知道符號=>可以在方法參數中用作按名稱調用,也可以用它來定義函數。上面的代碼看起來像是定義了一個函數,但它讓我感到困惑。scala編譯的原因是什麼(self:Runnable =>)?

回答

11

此語法表示explicitly typed self reference。這基本上意味着無論延伸OnCompleteRunnable還必須延伸Runnable

你可能不知道如何從簡單的繼承不同:

trait OnCompleteRunnable extends Runnable 

總之,不同的是,自我類型引用僅僅是一個類型約束。它不建立子類型關係,因此OnCompleteRunnable無法實施或覆蓋Runnable中的任何內容。所以它就像是一種較弱的繼承形式。

相關問題