問題タブ [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.
c# - C#でリフレクションを介してジェネリックメソッド制約を抽出する方法は?
型のオブジェクトが与えられた場合、System.Reflection.MethodInfo
ジェネリック パラメータの制約をどのように抽出できますか? どういうわけか、これに関する合理的な情報を見つけることができません。
swift - バグの可能性?制約を無視して汎用インスタンスを作成できます
シリアライゼーションとデシリアライゼーションを含むノードベースのフレームワークで作業しているときに、型制約を無視してクラスのインスタンスを作成できるケースにつまずきました。が準拠していない場所として定義されているのに、なぜZNumericProcessor<String>
内部を作成できるのですか? そして、それが確実ではないにもかかわらず、イニシャライザが呼び出されることさえ機能するのはなぜですか?ZSum
ZNumericProcessor
ZNumericProcessor<T: ZNumeric>
String
ZNumeric
ZSum
T
ZNumeric
通常、ZSum をコンパイルするために、ZSum の init に制約を設定することさえできないと考えていました。
2 番目: の init に制約がない場合、確実にのインスタンスを作成できるようにZSum
キャストするにはどうすればよいですか?T
ZNumericProcessor
ZNumeric
コード:
編集:これを読んだ後: Stackoverflow Threadを組み込んでみましたが、提供されているにもかかわらず、制限の少ないサブクラス初期化子は (ZSum で) 呼び出されません。
編集 2:より単純なバージョン、同じ効果、文字列は ZNumeric ではありませんが、文字列でもより制限的なイニシャライザが呼び出されます:
arrays - プロトコル配列を汎用配列に割り当てることはできません
以下にいくつかのコードがあり、コンパイル時にエラーが発生するものとそうでないものがあります。バグはありますか、それともここでジェネリックについて何か見逃していますか?
1)動作しません:
しかし、これは機能します:
2)動作しません:
しかし、これは機能します:
3) これも機能します:
T where T: DataType
また、との違いは何ですかT:DataType
PS:DataType は空のプロトコルです
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]
c# - 明示的なジェネリック型を避ける C#
を実装する必要class
がある制約を持つジェネリックがあるとします。型を明示的に宣言することなく、それを提供することを考慮して、を使用する方法はありますか?T
IWatchable<TKey>
Watcher
TKey
T
を使用したい場合は、 を2 番目の型としてWatcher
class
宣言する必要があります。TKey
または