問題タブ [covariance]

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

c# - C#の共変性と反変性に新しいキーワードが必要なのはなぜですか?

ジェネリック型がC#4.0のCoまたはContraバリアントであることを示すために、outまたはinパラメーターを追加する必要がある理由を誰かが説明できますか?

私はこれがなぜ重要なのか、そしてなぜコンパイラーがそれを理解できないのかを理解しようとしてきました。

ありがとう、

ジョシュ

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

class - クラス継承に関する共分散と反分散

「共分散」と「反分散」という概念の意味は何ですか?

AnimalElephant ( Animalから継承) の2 つのクラスが与えられた場合、 Elephant を Animals の配列に入れようとすると実行時エラーが発生するというのが私の理解です。特定の)アニマルよりも。しかし、Elephant が Animal プロパティを含むことが保証されていることを確認して、Animal を Elephant の配列に配置できますか?

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

c# - C# - ジェネリック クラスの配列共分散

C# は次のような配列で共分散をサポートしていることを知っています。

しかし、以下のコードをコンパイルしようとするとエラーが発生します

「型 'T[]' を 'K[]' に暗黙的に変換することはできません」と表示されます

なぜこのエラーが発生するのですか???

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

c# - C#4.0では、メソッドのoutパラメーターを共変にできないのはなぜですか?

この魔法のインターフェースを考えると:

そして、このクラス階層:

これでコンパイルできます:

これは素晴らしいことです。しかし、インターフェースを別の方法で定義するとどうなりますか?

別のブール値の戻り値を使用して、帽子が空である可能性があることを示しています(以前のバージョンでは、空の帽子からnullのウサギが返された可能性があります)。しかし、私はまだウサギを出力しているだけなので、以前のバージョンと論理的に異なることは何もしていません。

CTPのC#4.0コンパイラでは、インターフェイス定義にエラーが発生します。「out」メソッドパラメータが不変型である必要があります。これが許可されない理由はありますか、それとも将来のバージョンで対処される可能性がありますか?

0 投票する
6 に答える
7525 参照

c++ - C++ 共変テンプレート

これは以前に尋ねられたような気がしますが、SOで見つけることができず、Googleでも役立つものを見つけることができません. 「共変」は私が探している言葉ではないかもしれませんが、この概念は関数の共変の戻り値の型に非常に似ているため、おそらく正しいと思います。これが私がやりたいことであり、コンパイラエラーが発生します:

それらのクラスが完全に肉付けされていると仮定します...あなたはその考えを理解していると思います. 不明な理由でaSmartPtr<Derived>を aに変換できません。SmartPtr<Base>これは C++ や他の多くの言語では普通のことだと思いますが、現時点ではその理由は思い出せません。

私の根本的な質問は、この割り当て操作を実行する最良の方法は何ですか? 現在、ポインタを から引き出しSmartPtr、明示的に基本型にアップキャストしてからSmartPtr、適切な型の new にラップしています (自家製のSmartPtrクラスは侵入参照カウントを使用しているため、これはリソースをリークしていないことに注意してください)。SmartPtr特に、さらに別のオブジェクトでラップする必要がある場合は、長くて面倒です...ショートカットはありますか?

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

java - Scalaの変数宣言の一般的なワイルドカード

Javaではこれを行うかもしれません:

MyImpl implements MyInterface...もちろん()と仮定します。

Scalaでこれを使用する場合のアナログは何Bufferですか?

これは(もちろん)コンパイルされませんが、どのようにすると、そのlistように変数を宣言できますか?

編集; もう少し追加します。違いは明らかに、JavaではジェネリックはTで共変ではないのに対し、Scalaでは共変であるかどうかに関係しているという事実と関係があります。たとえば、ScalaクラスListはTで共変です(そして必然的に不変です)。したがって、以下がコンパイルされます。

私はまだコンパイラエラーに少し苦労しています:

Covariant type T occurs in contravariant position in ...

例えば; このコンパイラエラーは、クラス宣言で発生します。

別の質問をします...

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

generics - 例がコンパイルされないのはなぜですか、別名 (co-、contra-、および in-) 分散はどのように機能するのでしょうか?

この質問に続いて、誰かがScalaで次のことを説明できますか:

+T型宣言におけるとの違いを理解してTいます ( を使用するとコンパイルされますT)。しかし、それでは、パラメータ化されていないものを作成することに頼らずに、型パラメータが共変であるクラスを実際にどのように作成するのでしょか? 次のものを のインスタンスでのみ作成できるようにするにはどうすればよいTですか?

編集-これを次のようにしました:

これで問題ありませんが、必要な型パラメーターは 1 つだけですが、2 つの型パラメーターができました。次のように再質問します。

型が共変である不変 Slotクラスを作成するにはどうすればよいですか?

編集2:当たり前!私は使用varしていませんでしvalた。以下は私が欲しかったものです:

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

scala - Scalaの不変セットがそのタイプで共変ではないのはなぜですか?

編集:元の回答に基づいてこの質問を書き直しました

クラスは、そのscala.collection.immutable.Set型パラメーターで共変ではありません。どうしてこれなの?

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

scala - Scala API 設計; I が何らかのインターフェース (抽象/特性) である Set を返すサービス