【问题标题】:Generic type class instances performance泛型类实例性能
【发布时间】:2013-08-06 14:57:19
【问题描述】:

假设我有一个类型类

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] 类型的隐式参数调用方法时,都会构造一个新对象。是这样吗?如果,这是否足够便宜以至于不值得缓存实例?

其他问题:有没有更好的方法来做到这一点? (让一个类型类扩展另一个可能不是一种选择,例如,如果它们来自不同的库)

【问题讨论】:

    标签: scala


    【解决方案1】:

    要比较隐式转换及其替代方法的性能影响,请参阅this articleThis question 包含另一个微基准。

    【讨论】:

    • 谢谢,我应该想到寻找隐式转换。
    猜你喜欢
    • 2017-01-28
    • 2013-10-03
    • 2011-04-02
    • 1970-01-01
    • 2019-01-20
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多