2

この質問は、ジェネリック型の操作と境界の設定に関するものです。私が使用しているライブラリーのために、びっくりしないでください。例として扱ってください。

私はScalalaを使用しており、そのようなタイプを使用してDenseMatrix[V]DenseVectorCol[V]ますDenseVectorRow[V]。それらの一般的なスーパータイプはですTensor[K,V]Tensorには追加のパラメータがあることに注意してください。K前述のすべてのクラスDense...は、このタイプKを独自に設定します。

そこで、型の上限がである引数を持つメソッドを書きたいと思いTensorます。私は自分のメソッドのためにそのようなコードを書きました:

def validate[K,T <: Tensor[K,Double]](tensor : T) : T = ...

そのような意図で-TはのサブタイプでなければならずTensor、私は常にsを使用していることを知っているDoubleので、それをとしましょう。Double最初の型の引数(K)については、渡された引数から取得します。

エラーが発生したため、期待どおりに機能しません。

推論された型引数[Nothing、DenseVectorCol [Double]]は、メソッド検証の型パラメーター境界[K、T <:Tensor [K、Double]]に準拠していません

質問K:渡された引数からこの型を抽出する方法は?

4

1 に答える 1

2

まったく気にしない場合はK、ワイルドカードを使用できます。

def validate[T <: Tensor[_, Double]]: T = ...

場合によってはこれが機能しないことに注意してください (たとえば、 a を返す必要がある場合、Kまたはメソッドでそれを使用する必要がある場合)。うまくいきます。

于 2012-09-15T23:47:50.490 に答える