首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候应该使用隐式类?

什么时候应该使用隐式类?
EN

Stack Overflow用户
提问于 2018-01-18 12:55:43
回答 2查看 1.6K关注 0票数 4

对于我来说,我将在以下场景中使用一个隐式类:

  • 不能访问基础类型来添加我想要的方法。
  • 我想要的方法在“全球”意义上没有意义。
  • 我将功能分解为另一个“扩展”库。
  • 实际上,转换为新类型会增加语义/可读性值(新类型实际上意味着某种东西)

然而,我对Scala相当陌生(<6个月),我注意到周围的开发人员都在使用隐式类,当它破坏了上面的场景时。当我问为什么,答案是“因为这是我一直做的”。

因此,我的问题是,是否有正式的建议,什么时候应该使用一个隐含的类,而不是一个正常的函数添加到类的定义?(我在这里什么都找不到:https://docs.scala-lang.org/overviews/core/implicit-classes.html)

EN

回答 2

Stack Overflow用户

发布于 2018-01-18 13:14:46

根据啜饮

隐式类的动机是在Scala中使用流行的扩展方法模式(有时称为拉皮条客我的图书馆模式 )来用新的方法、字段和接口扩展预先存在的类。还有另一个常见的“扩展”用例,称为类型特征或类型类 (参见scala.math.Numeric)。类型类提供了与扩展方法模式非常相似的纯继承层次结构的替代方案。这两种技术的主要缺点是每次调用时都会创建一个额外的对象以获得方便的语法。这使得这些有用的模式不适合在性能关键代码中使用。在这些情况下,删除模式的使用并使用带有静态助手方法的对象是很常见的。

并因此添加了隐式类语法来解决这些问题。

票数 2
EN

Stack Overflow用户

发布于 2018-01-18 14:39:47

石头。他们允许你自己做DSL。看看喷雾代码,这是我们最喜爱的经典项目之一:

代码语言:javascript
运行
复制
trait TransformerPipelineSupport {
  ...
  implicit class WithTransformation[A](value: A) {
    def ~>[B](f: A ⇒ B): B = f(value)
  }
  ...
}

~>允许编写喷雾指令..。还有很多例子

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

https://stackoverflow.com/questions/48321902

复制
相关文章

相似问题

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