問題タブ [generic-constraints]

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

c# - C#でリフレクションを介してジェネリックメソッド制約を抽出する方法は?

型のオブジェクトが与えられた場合、System.Reflection.MethodInfoジェネリック パラメータの制約をどのように抽出できますか? どういうわけか、これに関する合理的な情報を見つけることができません。

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

swift - バグの可能性?制約を無視して汎用インスタンスを作成できます

シリアライゼーションとデシリアライゼーションを含むノードベースのフレームワークで作業しているときに、型制約を無視してクラスのインスタンスを作成できるケースにつまずきました。が準拠していない場所として定義されているのに、なぜZNumericProcessor<String>内部を作成できるのですか? そして、それが確実ではないにもかかわらず、イニシャライザが呼び出されることさえ機能するのはなぜですか?ZSumZNumericProcessorZNumericProcessor<T: ZNumeric>StringZNumericZSumTZNumeric

通常、ZSum をコンパイルするために、ZSum の init に制約を設定することさえできないと考えていました。

2 番目: の init に制約がない場合、確実にのインスタンスを作成できるようにZSumキャストするにはどうすればよいですか?TZNumericProcessorZNumeric

コード:

編集:これを読んだ後: Stackoverflow Threadを組み込んでみましたが、提供されているにもかかわらず、制限の少ないサブクラス初期化子は (ZSum で) 呼び出されません。

編集 2:より単純なバージョン、同じ効果、文字列は ZNumeric ではありませんが、文字列でもより制限的なイニシャライザが呼び出されます:

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

arrays - プロトコル配列を汎用配列に割り当てることはできません

以下にいくつかのコードがあり、コンパイル時にエラーが発生するものとそうでないものがあります。バグはありますか、それともここでジェネリックについて何か見逃していますか?

1)動作しません:

しかし、これは機能します:

2)動作しません:

しかし、これは機能します:

3) これも機能します:

T where T: DataTypeまた、との違いは何ですかT:DataType

PS:DataType は空のプロトコルです

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

swift - 迅速なパターンマッチング

以下のコードでは:

もし入っていれば

(所有者変数は次のように定義されます[Serializable])

case let value as Array<Serializable>:それを認識しますが、次の場合:

(所有者変数は次のように定義されます[Owner])

case let value as Array<Serializable>:プロトコルOwnerに準拠していますが、認識しませんか? Serializable誰かが理由を説明できますか?

私は試した:

[Owner]が動作するので、Swift はそれが[Serializable]であることを認識しcase let value as Array<Serializable>ます。[Serializable][Owner]

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

c# - 明示的なジェネリック型を避ける C#

を実装する必要classがある制約を持つジェネリックがあるとします。型を明示的に宣言することなく、それを提供することを考慮して、を使用する方法はありますか?TIWatchable<TKey>WatcherTKeyT

を使用したい場合は、 を2 番目の型としてWatcher class宣言する必要があります。TKey

または