通用类型类实例性能

时间:2013-08-06 14:57:19

标签: scala

假设我有一个类型

trait CanMeow[T] {
    def meow(t:T):String
}

现在我有一个不同的类型

trait IsCatEquivalent[T] {
    def makeSound(t:T):String
    def isAlive(t:T):Boolean
}

现在我想制作CanMeow类型的每个CatEquivalent成员。我能做的是

implicit def catEquivalentCanMeow[T](implicit ce:IsCatEquivalent[T]) = new CanMeow[T] {
    def meow(t:T) = ce.makeSound(t)
}

这对性能有何影响?每次使用CanMeow [T]类型的隐式参数调用方法时,都会从它的外观中构造一个新对象。是这样吗?如果,这是否足够便宜,不值得缓存实例?

其他问题:有更好的方法吗? (使一个类型类扩展另一个类型可能不是一个选项,例如,如果它们来自不同的库)

1 个答案:

答案 0 :(得分:4)

要比较隐式转化及其替代方案的效果影响,请参阅this articleThis question包含另一个微基准。