私のcore
sbtモジュールには、マトリックスデータ型の場合はMatrix
、ファクトリメソッドがある場合はMatrixInstance
という特性があります。コンパニオンオブジェクトは、この特性を拡張することになっています。別のSBTサブモジュールimplementation1
でコンパニオンオブジェクト/ファクトリを別のサブモジュールに実装
、私はこの
object Matrix extends MatrixInstance { ... }
コンパニオンを実装したいと思います。
ここで考えているのは、2番目の実装を選択した場合、ライブラリユーザーはlibraryDependencies += ...
をimplementation1
からimplementation2
に変更することができるということです。
ただし、これは機能していないようです。つまり、オブジェクトのように見え、それはコンパニオンが同じモジュール(ファイル?)になければならないということです。それ以外の場合、私は循環依存関係を取得し、scalacは失敗します。
この機能を実現するために使用できるパターンはありますか?ファクトリ/コンパニオンオブジェクトのインタフェース特性を定義し、それを個別のアーチファクトに実装させ、次にユーザがlibraryDependencies
を変更するだけで実装間で選択できるようにするか、
が言います、メソッド(すなわち、機能性)を使用することができます。たとえば、猫では、あなたはまだ例を書いています。 'option(2)'ではなく、 'option(2)'を使ってデータ型を作成します。私がここで変更しようとしているのは、代数ではなく 'Option'の実装です。 – Luciano
これはあなたが提案しているとは思えませんが、元のコンパニオンオブジェクトを拡張するtypeclassを作成することは可能かもしれません。例えば'暗黙のクラスMatrixImpl1(val companion:Matrix.type){def apply()...}'それがうまくいけば(コンパニオンオブジェクトを拡張する) – Luciano