2017-05-30 28 views
0

我在Scala Saddle中找到了以下定義,只是想確保我正確理解它。有一個對象界定暴露了一些HDF5 I/O功能的幀類型,以便writeHdfFile功能變爲可用於任何幀的隱函數:新和大括號(沒有類型創建)的含義是什麼?

object H5Implicits { 
    /** 
    * Provides enrichment on Frame object for writing to an HDF5 file. 
    */ 
    implicit def frame2H5Writer[RX: ST: ORD, CX: ST: ORD, T: ST](frame: Frame[RX, CX, T]) = new { 

    /** 
    * Write a frame in HDF5 format to a file at the path provided 
    * 
    * @param path File to write 
    * @param id Name of the HDF group in which to store frame data 
    */ 
    def writeHdfFile(path: String, id: String) { 
     H5Store.writeFrame(path, id, frame) 
    } 

    } // end new 
} 

但是,我從來沒有見過的= new {語法。這是否意味着它每次都創建並返回一個新函數?爲什麼會更有意義而不僅僅是做= {

回答

5

它是一個具有1個功能的新匿名類。

在這種情況下,它用於爲frame: Frame[RX, CX, T]提供語法。

有了這個幫手類的範圍,你可以寫。

frame.writeHdfFile(...) 

沒有這個技巧,你需要寫。

writeHdfFile(frame, ...) 

通常情況下,這是用隱式類而不是隱式類似的方式完成的。

此技巧的一個好處是,您可以將輔助方法添加到類中,而無需直接更改它們。請注意0​​未在Frame上定義

這與在scala中實現類型類非常類似。

相關問題