0

我在 Scala Saddle 中找到了以下定义,只是想确保我理解正确。有一个对象定义了一个隐式函数,它将一些 HDF5 I/O 功能暴露给 Frame 类型,以便该writeHdfFile函数可用于任何 Frame:

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 {语法。这是否意味着它每次都在创建并返回一个新函数?为什么这比简单地做更有意义= {

4

2 回答 2

5

它是一个具有 1 个功能的新匿名类。

在这种情况下,它用于为frame: Frame[RX, CX, T].

使用范围内的这个助手类,您可以编写。

frame.writeHdfFile(...)

如果没有这种技术,您将需要编写。

writeHdfFile(frame, ...)

通常这是通过隐式类而不是像那样的隐式定义来完成的。

这种技术的一个好处是您可以将辅助方法添加到类中,而无需直接更改它们。注意writeHdfFile未定义的方式Frame

这与在 scala 中实现类型类的方式非常相似。

于 2017-05-30T09:38:48.043 回答
2

它正在创建一个匿名类。您可以在此处了解有关scala 中匿名类的更多信息

于 2017-05-30T09:40:41.387 回答