私のコントロールの外にあるfoo既存のタイプのメソッドを提供したいとします。A私の知る限り、Scalaでこれを行うための標準的な方法は、を実装Aするある型への暗黙の変換を実装することfooです。今、私は基本的に2つのオプションを見ています。
次の目的のために、別の、場合によっては非表示のクラスを定義します。
protected class Fooable(a : A) { def foo(...) = { ... } } implicit def a2fooable(a : A) = new Fooable(a)匿名クラスをインラインで定義します。
implicit def a2fooable(a : A) = new { def foo(...) = { ... } }
バリアント2)は、特に多くのタイプパラメータが発生する場合、確かに定型文が少なくなります。一方、1)でグローバルに1つのクラスが作成されるのではなく、(概念的には)変換ごとに1つのクラスが作成されるため、オーバーヘッドが増えるはずです。
一般的なガイドラインはありますか?コンパイラ/VMは2)のオーバーヘッドを取り除くので、違いはありませんか?