2013-12-22 66 views
2

看下面的Scala in Depth代碼,handle -> callback是什麼意思?Scala - >功能

trait Observable { 
    type Handle 
    def observe(callback: this.type => Unit): Handle = { 
    val handle = createHandle(callback) 
    callbacks += (handle -> callback) 
    handle 

    [code omitted] 
} 

回答

2

->最終來自scala.ArrowAssoc。 Predef還定義了:

@inline implicit def any2ArrowAssoc[A](x: A): ArrowAssoc[A] = new ArrowAssoc(x) 

這導致Any隱式轉換爲ArrowAssoc。這具有將ArrowAssoc的->方法添加到所有對象(因爲所有對象都從Any繼承)的效果。

至於什麼->確實,它只是返回兩個參數的Tuple2。換句話說,(handle -> callback)(handle, callback)差不多。

雖然您已刪除該定義,但callbacks可能是mutable.Map對象。 +=在所述地圖中添加(或更新)與handlecallback相關聯的條目。所以基本上,這似乎是將新創建的句柄和回調添加到回調地圖。

+0

感謝。是否有一個原因(除了風格)使用'(句柄 - >回調)'而不是'(句柄,回調)'? –

+1

'scala.collection.Map'有一個方法'+',它接受任意數量的參數。這樣調用:'map +(key,value)'可以被解釋爲嘗試添加兩個條目'key'和'value',然後由於不是正確的類型而失敗。另外,' - >'不需要括號。 –

+0

' - >'語法只是爲了方便使用地圖,您可以將它看作一個箭頭來將鍵與值相關聯。例如,使這個語法易於閱讀:'val m = Map(1 - >「one」,2 - >「two」,3 - >「three」)' – Jesper

1

手柄是一種「抽象類型」。它必須在具體的子類中定義。

回調是一個函數,它需要一個(this.type)並且不返回任何東西(Unit)。

的 - >語法爲元組只是替代語法:

(3 - > 「ABCD」)是相同的(3, 「ABCD」)