問題タブ [scala-generics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
33 参照

scala - Scalaジェネリックの互換性を反射的に決定する

ターゲットの型 (たとえばList[String]) とオブジェクト o が与えられた場合、目標は、ターゲットの型と互換性のある戻り値の型を持つ o のメソッドを見つけることです。

ジェネリックがない場合は、 from<:<演算子 (Java の のスカラ リフレクション アナログ)を使用してメソッドのターゲット型と戻り値の型を比較す​​ることで、これを確認できます。isAssignableFromscala.reflect.runtime.universe

このアプローチは、ジェネリックが存在する場合には機能しません。たとえば、メソッドの戻り値の型が をdef getEmptyList[T]: List[T] = Nil満たしていませんList[T] <:< List[String]getEmptyList[T]の戻り値の型が実際に と互換性があることをどのように判断 しList[String]ますか?

0 投票する
1 に答える
2118 参照

scala - 自己型が基本クラスに準拠していません

次のコードを使用します。

BasicHelloケース クラスで IDE に次のエラーが表示されます。

BasicHelloextends以来Hello[BasicBaz]、コンパイラがこれを許可しない理由がわかりませんBaz[BasicFoo, BasicBar]。のタイプは、ミックスインが必要とするものとまったく同じであるBasicHello必要があります。自己型に欠けている階層プロパティはありますか? Hello[Baz[Foo, Bar]]World

0 投票する
3 に答える
182 参照

scala - 共変型 FParam は、値推測の型 Seq[FParam] の反変位置で発生します

次の簡単な例を考えてみましょう。

コンパイルされません。

共変型は、値推測のFParam型の反変位置で発生します。Seq[FParam]

しかし seq は と定義されてtrait Seq[+A]いるので、この反変性の原因は何でしょう? (質問1 )

逆に、次の単純な例を考えてみましょう-FParam:

反変型は、型の共変位置で発生します(FParam) => FRes

繰り返しますが、同じパラドックスです:Function1[-T1, R]では、最初の型パラメーターは明らかに反変であるのに、なぜFParam共変の位置にあるのでしょうか? (2 )

Lower type boundsで説明されているように分散を反転することでこの問題を修正できますが、なぜそれが必要なのかは不明です。