問題タブ [contravariance]

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 投票する
3 に答える
3161 参照

c++ - C++でテンプレートクラスの共分散を実装するには?

テンプレート引数が関連している場合、あるオブジェクトを別のオブジェクトにキャストできるような方法でクラス テンプレートを実装することは可能ですか? アイデアを示す例を次に示します (もちろん、コンパイルされません)。

ここでの追加の問題は、Foo が T& および T* を返す関数を含むインターフェイスとして使用される抽象クラスであるため、テンプレート コピー コンストラクターを実装できないことです。

私は任意の STL イテレータを保持できるユニバーサル Iterator クラスを作成しています。型消去に加えて、ポリモーフィックにしたいと考えています。つまり、次のように記述できます。

UPD:それは私の間違いでした。MyIterator を実装するために実際に Foo* を Foo* にキャストする必要はなかったので、この質問はもはや現実的ではないと思います。

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

c# - キャスティングリスト-共分散/反変性の問題

次のタイプが与えられます:

どうすればaをに変換できList<MyClass>ますList<IMyClass>か?共分散/反変性のトピックについては完全には明確ではありませんが、そのためにリストを単純にキャストすることはできないことを理解しています。

私はこの些細な解決策しか思いつかなかった。優雅さを欠き、資源を浪費する:

どうすればよりエレガントでパフォーマンスの高い方法でそれを解決できますか?

.NET 2.0ソリューションが必要ですが、完全を期すために、新しいフレームワークバージョンを使用したより洗練されたソリューションも見たいと思います。

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

c# - T は反変的に有効でなければなりません

これの何が問題なのですか?

それは言います:

無効な分散: 型パラメーター 'T' は、'MyNamespace.IRepository.Delete(T)' で反変的に有効でなければなりません。「T」は共変です。

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

c# - Co および Contra 分散のジェネリック インターフェイスの実装とその実用的な使用法

バリアント ジェネリック インターフェイス (co バリアントと contra バリアントの両方を使用) の使用の可能性を理解しようとしています。誰か説明してくれませんか?インターフェースの共分散と逆分散の例を個別に理解しました。

共分散の例

反分散の例

共分散/反対分散

ありがとう

0 投票する
4 に答える
499 参照

scala - 共変性と反変性

'val'と'case'は型システムにどのようにそしてなぜ影響しますか?(特に分散)

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

.net - 合法的にキャストするチャンスはありますか?

ここに質問を投稿するのはこれが初めてなので、事前に誰かに感謝します(そしておそらく他の人も)。

今日、私は C# 4 の共分散と反分散に戸惑いましたが、私がやりたいことを実行できる可能性はまったくありません。注:これは特定の問題を解決するためのものではありませんが、それを解決するための合法的な方法(C#4の真新しい共分散/反分散)があるかどうか知りたいです。だから、夢中にならないで...

サンプルコードは次のとおりです。

コレクションは、任意の T の IBase 派生物をホストできる必要があります。もちろん、非ジェネリック コレクションまたはリストを使用することができ、ゲームは終了します。もう 1 つのアイデアは、より一般的なインターフェイス IBaseCore を使用して、IBase を継承することです。私の質問は次のとおりです。これらのトリックがなければ、IBase のコレクションを取得して、任意の IBase のアイテムを追加できますか?

みんなありがとう。

0 投票する
2 に答える
178 参照

.net - デリゲートに関連する反変性は、言語的にどのように意味をなすのでしょうか?

ウィキペディアから:

covariant : 広い (double) から狭い (float) に変換します。
contravariant : 狭い (float) から広い (double) に変換します。

.NET では、デリゲートの指定された戻り値の型の派生型を参照を保持するメソッドの戻り値の型にすることができるため、デリゲートには共分散があります。

同様に、デリゲートには反変性があります。これは、デリゲートの指定された引数 (パラメーター) の派生型を、参照を保持するメソッドに渡される引数の型にすることができるためです。

デリゲートに関連するこれら 2 つの定義では、どちらも共分散であるべきではありませんか? どちらの場合も、デリゲートは「より広い」型を期待していますが、「より狭い型」が与えられています。

MSDN の両方の例については、こちらを参照してください。

では、デリゲートに関連する場合、反変性という言葉は言語的にどのように意味を持つのでしょう?

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

scala - エラー: 共変の型 A が反変の位置にあります

Matrix[A]不変クラスを書こうとしていました。クラスを共変にしたいのですが、コンパイラの前Aに置くと、クラス内のいくつかの操作について不平を言い始めます。+A

以下は、私のクラスの関連するサブセットですMatrix(実際のクラスは、次のサブセットよりも約 5 倍大きくなります)。

コンパイラは、クラスの最後の 4 つの操作について、「共変型 A が反変位置で発生します」というエラーを表示します。これらのエラーの理由と、それを取り除く方法を理解できません。これらのエラーの背後にある理由を説明し、それらを回避する方法を提案してください。ありがとう。

0 投票する
2 に答える
2245 参照

scala - ビジネスアプリケーションの設計において、共分散と反分散はどのように使用されますか?

co-私は、標準ライブラリ (例: collectionsとcontravariancetrait Function)の使用について知っており、「現実世界」のビジネス アプリケーションの設計にどのように使用されているのco-か疑問に思っています。contravariance

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

scala - 型パラメータの分散を決定する方法は?

Scala の共変性と反変性の実世界の例に触発されて、より良い質問は次のようになると思いました。

ライブラリを設計するときに、型パラメーターを共変にするか反変にするかを決定する際に自問すべき特定の質問のセットはありますか? それとも、すべてを不変にしてから、必要に応じて変更する必要がありますか?