在Scala中提供类型类的实例时,使用val或object是否更好?

jed*_*sah 6 scala implicit typeclass

Scala中的类型类模式涉及定义特征,例如:

trait Show[T] {
    def show(obj: T): String
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以定义此类型类的实例化:

object Show {
    implicit val string = new Show[String] {
        def show(obj: String): String = obj
    }
    implicit object BooleanShow extends Show[Boolean] {
        def show(obj: Boolean): String = obj.toString
    }
}
Run Code Online (Sandbox Code Playgroud)

为伴随对象中的基本类型定义这些实例化的优点是,无论何时涉及类型类(粗略地),它们都自动在范围内.

在功能上它似乎将实例化定义为隐式val或隐式对象不会发生太大变化.

有区别吗?有一种方式比另一种更好吗?

0__*_*0__ 0

Withval x = new X { }您正在创建 的匿名子类X,而 withobject x extends X您则创建一个“适当的”子类。我认为 an 的开销object是最小的,并且正如 @applicius 指出的,它有正确的名称。因此我建议在这种情况下选择object