私は既存の型に新しい関数を追加しようとしています(私はIDEが自動的に制御できないタイプの関連する関数を提案することができます。例えばFuture[Option[A]]
)。私は、これを達成するために暗黙のクラスと暗黙的な変換の両方を調べましたが、どちらも同じ動作を提供するようです。暗黙的な変換暗黙のクラス対形質への暗黙の変換
case class Foo(a: Int)
implicit class EnrichedFoo(foo: Foo) {
def beep = "boop"
}
Foo(1).beep // "boop"
と使用:
case class Foo(a: Int)
trait Enriched {
def beep: String
}
implicit def fooToEnriched(foo: Foo) = new Enriched {
def beep = "boop"
}
Foo(1).beep // "boop"
を私はここに1差が第1の例では、ワン作成されるかもしれないと仮定
暗黙のクラスを使用しての間で任意の有効な違いがありますクラスの代わりにクラスを使用することもできますが、暗黙的なクラスを抽象的な特性に拡張するために簡単に適応できます。例:
case class Foo(a: Int)
trait Enriched {
def beep: String
}
implicit class EnrichedFoo(foo: Foo) extends Enriched {
def beep = "boop"
}
Foo(1).beep // "boop"
さらに、タイプAのオブジェクトをタイプBのオブジェクトに変換する場合(ここでBは* final class * *です)、暗黙のdefが唯一のオプションです。 – Adowrath