首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是新的和卷曲大括号(没有类型创建)?

什么是新的和卷曲大括号(没有类型创建)?
EN

Stack Overflow用户
提问于 2017-05-30 09:31:43
回答 2查看 84关注 0票数 0

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

代码语言:javascript
复制
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 {语法。这是否意味着它每次都要创建和返回一个新函数?为什么这样做比简单地做= {更有意义呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-30 09:38:48

它是一个具有1函数的新匿名类。

在本例中,它用于向frame: Frame[RX, CX, T]提供语法。

有了这个帮助类的作用域,您可以编写。

代码语言:javascript
复制
frame.writeHdfFile(...)

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

代码语言:javascript
复制
writeHdfFile(frame, ...)

通常,这是通过一个隐式类来完成的,而不是这样的隐式def。

这种技术的一个好处是,您可以将帮助器方法添加到类中,而无需直接更改它们。注意writeHdfFile是如何没有在Frame上定义的

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

票数 5
EN

Stack Overflow用户

发布于 2017-05-30 09:40:41

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44258540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档