对于我来说,我将在以下场景中使用一个隐式类:
然而,我对Scala相当陌生(<6个月),我注意到周围的开发人员都在使用隐式类,当它破坏了上面的场景时。当我问为什么,答案是“因为这是我一直做的”。
因此,我的问题是,是否有正式的建议,什么时候应该使用一个隐含的类,而不是一个正常的函数添加到类的定义?(我在这里什么都找不到:https://docs.scala-lang.org/overviews/core/implicit-classes.html)
发布于 2018-01-18 05:14:46
根据啜饮,
隐式类的动机是在Scala中使用流行的扩展方法模式(有时称为拉皮条客我的图书馆模式 )来用新的方法、字段和接口扩展预先存在的类。还有另一个常见的“扩展”用例,称为类型特征或类型类 (参见scala.math.Numeric)。类型类提供了与扩展方法模式非常相似的纯继承层次结构的替代方案。这两种技术的主要缺点是每次调用时都会创建一个额外的对象以获得方便的语法。这使得这些有用的模式不适合在性能关键代码中使用。在这些情况下,删除模式的使用并使用带有静态助手方法的对象是很常见的。
并因此添加了隐式类语法来解决这些问题。
发布于 2018-01-18 06:39:47
石头。他们允许你自己做DSL。看看喷雾代码,这是我们最喜爱的经典项目之一:
trait TransformerPipelineSupport {
...
implicit class WithTransformation[A](value: A) {
def ~>[B](f: A ⇒ B): B = f(value)
}
...
}
~>允许编写喷雾指令..。还有很多例子
https://stackoverflow.com/questions/48321902
复制