問題タブ [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.
generics - エラーが発生せず、期待どおりの動作をしない一般的な制約を持つ型拡張
F# 4.0、.NET 4.6 を使用した次のコード スニペットを検討してください。
型の拡張type X<'T when 'T :> string> with
が尊重されるか (この場合は、string
が封印されているか、 be に制限さ'T
れているため、エラーを意味しますstring
)、または構文エラーが発生することを期待します。
さらに、次の構文も使用できますが、これは通常の型定義 ( なしwith
)では構文エラーになります。
私の推測では、拡張機能では制約が単純に無視されます。それは設計によるものですか?または、機能するはずですか?もしそうなら、どのように?
型拡張を少し試して、特定の具体的な型にのみ適用される特定のメソッドのセットを作成できるかどうか、またはさらに制限された具体的な型 (継承によっても実行できるもの) を作成できるかどうか疑問に思ったときに、これらすべてにたどり着きました。 )。
swift - ジェネリック関数をフィルタリングしたり、複数のオプションを設定したりするにはどうすればよいですか?
値を受け取る関数があり、それを NSUserDefaults に送信してプロパティ リストに格納します。
値がプロパティ リストに受け入れられる可能な型の 1 つだけになるように、一般的な制約を設定するにはどうすればよいですか?
私は次のようなことを考えていました:
もちろん機能しません。
c# - ジェネリック型は相互に参照します
私は単純なパーサーを書き、次の 2 つのインターフェースを実装したいと考えています。
次の目的があります:ITokenizer
文字列をトークンで分割するための不変クラスです。Advance
メソッドを呼び出してResult
、次のトークンと次のトークナイザーを取得できます。したがって、トークンとトークナイザーをResult
クラスに保存し、これにコンパイル時の制約を追加したいと考えています。
この 2 つのインターフェイスの構築中にコンパイル エラーが発生しました。
次のクラスは、すべての制約を持つインターフェイスを実装できると思いました。
誰が何が悪いのか説明できますか? なぜそれが不可能なのか、またはこのコードを正しくするにはどうすればよいのでしょうか?
PS私の仕事ではIResult<TValue, TToken>
、制約なしで単純にインターフェイスを使用できますが、制約を失うことなくこれを実装できますか?
コンパイラ エラー:
c# - ジェネリック メソッドの入れ子になったジェネリック型を制約する方法
指定されたジェネリック型に基づいてデータベースからデータを返すメソッドを作成しようとしています。
インターフェイス: (この定義はコンパイルされます)
可能な具体的な実装: (この定義はコンパイルされます)
インターフェイスに基づいてジェネリック メソッドを作成しようとしています: (この定義はコンパイルされません)
エラー:
このように使用するには:
質問:
なぜこれはインターフェイス用にコンパイルされ、メソッド用にはコンパイルされないのですか?
両方が機能するか、両方が失敗することを期待していました。記事と注文の両方の具象型を定義する TOrderPosition に指定された型から、コンパイルが TOrder と TArticle の型を推測できると仮定しました。
なぜこれが起こるのか、すべてのタイプを明示的に指定しなくても問題を解決できるかどうか、またどのように解決できるかを知りたいです。
c# - クラス レベルでの構造体と文字列の一般的な制約
こんにちは、一般的な制約として構造体と文字列の両方を持つクラスを作成するための回避策はありますか?
私の目標は、同じ構造を持つ重複したメソッドを作成する手間から自分を救うことですが、違いは、もう一方は文字列を受け入れ、もう一方は構造体 (値型) を受け入れることです。