数値に変換できるものなら何でもパラメータ化できるクラスを作成しました
class Complex[T <% Numeric[T]] (val real : T, val imag : T) {
//... complex number methods ...
}
次に、コードの他の場所で試してみます。
var myComplex = new Complex(0, 1)
(驚くべきことに)IntとNumeric [Int]の間、またはIntとIntegral [Int]の間でさえ暗黙の変換がないため、これによりコンパイルエラーが発生します。
私は何かが足りないのですか?私が見ていないところに暗黙の変換がありますか?
Numeric.scalaで定義されたIntIsIntegralと呼ばれる暗黙のオブジェクトがあります。これを使用して、独自の暗黙的な変換メソッドを作成してみました。
def implicit intToNumericInt(val i : Int)(implicit n : IntIsIntegral) = n.fromInt(i)
これが必要であることに驚いています。とにかく、.fromIntメソッドへの無限再帰につながるようです。
私は基本的なものが欠けていると確信しています(あなたが言うことができるように、私はScalaに不慣れです)ので、正しい方向へのポイントをいただければ幸いです。
例からわかるように、私は任意の数値タイプを受け入れて機能できる複素数の実装を機能させようとしています。これをscalala(線形代数)プロジェクトに貢献したいと思っています。続いて、行列内の要素(主に+演算子と*演算子のみ)の責任と、複素数のサポートを行列操作ライブラリに後付けする特性を紹介します。