0

型クラスがあるとしましょう

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] 型の暗黙的なパラメーターで呼び出されるたびに、新しいオブジェクトが構築されます。そうですか?そして、これはインスタンスをキャッシュする価値がないほど十分に安いのでしょうか?

その他の質問: これを行うためのより良い方法はありますか? (たとえば、それらが異なるライブラリからのものである場合、一方の型クラスを他方の型クラスに拡張することはオプションではない場合があります)

4

1 に答える 1

4

暗黙的な変換とその代替手段のパフォーマンスへの影響を比較するには、この記事を参照してください。この質問には別のマイクロベンチマークが含まれています。

于 2013-08-06T15:06:28.520 に答える