2

Scala のコンテキスト バインド パターンを使用して、次のことを実行したいと考えています。

    class Polynomial[T: Ring] {
        def apply[X: Ring with Includes[T]](x: X): X = ...
        ...
    }

これは、係数が a の要素である必要がある多項式クラスRing Tです。この多項式を要素に適用する (評価) 場合、パラメーターの型はxリングである必要があり、 type の要素は typeTに暗黙的にキャストできますX。たとえばT = Double, X = SquareMatrix

Scala のジェネリック型パラメーターに複数の型制約を課すにはどうすればよいですか?

4

2 に答える 2

0

この[X: T]構文は、 type の暗黙的なパラメーターを要求するための単純な構文糖衣ですT[X]。たとえば、f以下f2は同じです。

 def f[T: X]
 def f2[T](implicit xt: X[T])

コードに関しては、暗黙のパラメーターを明示的に書き出すと、制約を表現できます。

class Polynomial[T: Ring] {
    def apply[X](x: X)(implicit xt: Ring[X] with Includes[T]): X = ...
}

Xまたは のいずれかに複数の制約を課していないことに注意してTください。制約は、コンテキストにバインドされた構文糖衣に対して単純に複雑すぎます。ただし、Scala では、型パラメーターに好きなだけコンテキスト境界を課すことができ、それらを上限および下限と組み合わせることもできます。

def f[T >: List[Int] <: AnyRef : Ordering : List] = ???
于 2014-07-13T03:14:36.343 に答える