我在Scala鞍中找到了以下定义,只想确保我正确地理解了它。有一个对象定义了一个隐式函数,该函数将某些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 {语法。这是否意味着它每次都要创建和返回一个新函数?为什么这样做比简单地做= {更有意义呢?
发布于 2017-05-30 09:38:48
它是一个具有1函数的新匿名类。
在本例中,它用于向frame: Frame[RX, CX, T]提供语法。
有了这个帮助类的作用域,您可以编写。
frame.writeHdfFile(...)如果没有这种技术,您将需要编写。
writeHdfFile(frame, ...)通常,这是通过一个隐式类来完成的,而不是这样的隐式def。
这种技术的一个好处是,您可以将帮助器方法添加到类中,而无需直接更改它们。注意writeHdfFile是如何没有在Frame上定义的
这非常类似于在scala中实现类型类的方式。
发布于 2017-05-30 09:40:41
它正在创建一个匿名类。您可以了解更多关于scala中的匿名类的信息。
https://stackoverflow.com/questions/44258540
复制相似问题