从这篇博客文章中我了解到 ,Scala中的“类型类”只是使用特征和隐式适配器实现的“模式”。如博客中所述,如果我具有trait A和适配器,B -> A则可以调用一个函数,该函数需要type A的参数和type类型的参数,B而无需显式调用此适配器。我发现它不错,但不是特别有用。您能否给出一个用例/示例,以说明此功能的用途?
3 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
重读那里的第一条评论:
类型类和接口之间的关键区别在于,要使类A成为接口的“成员”,它必须在其自己的定义位置进行声明。相反,只要您可以提供所需的定义,就可以随时将任何类型添加到类型类中,因此在任何给定时间的类型类的成员都取决于当前作用域。因此,我们不在乎A的创建者是否期望我们希望它属于的类型类;如果不是,我们可以简单地创建我们自己的定义以表明它确实属于自己,然后相应地使用它。因此,这不仅提供了比适配器更好的解决方案,从某种意义上说,它消除了适配器要解决的整个问题。
我认为这是类型类最重要的优点。
此外,它们可以正确处理操作没有我们正在分派的类型的参数或具有多个参数的情况。例如考虑这种类型的类:
case class Default[T](val default: T)
object Default {
implicit def IntDefault: Default[Int] = Default(0)
implicit def OptionDefault[T]: Default[Option[T]] = Default(None)
...
}
添加回答
举报
0/150
提交
取消