継承とパラメトリック多形( "ジェネリック")の概念、特に分散について、また、how( "構文")とどこで(use-site/declaration-site)という概念を統一することが一般的に可能かどうかは疑問です。定義する必要がありますか?継承とパラメトリック多相性の概念を統一することは可能ですか?
- サブタイピングのE: は、この観点を考慮してください。 g。
S <: T
は、入力引数がT
を受け入れるため、S
も受け入れるため、共変量動作として認識されます。 - "継承モデルの分散"を不変に変更することは、サブタイプを禁止することによって定義側でのみ可能です(例えば、
final
修飾子をクラス定義に追加することによって)、逆分散は私が見た限り可能ではありませんほとんどの場合、 - パラメトリック多型は、デフォルトでは不変であるが、
- 考えると、双方の間で無視できないコンセプトのミスマッチがあるように思わコ/コントラバリアント
行うことができます痛みの言語は「安全でない」共分散(例えば、 g。 Java/C#で
String[] <: Object[]
)継承/パラメトリック多型が宣言され、それが
ような、しかしうまく一緒にその作業の両方見ることができるいくつかの言語でclass Foo extends Ordered[Foo]
を継承するように比べ使用方法で
を使用して、順序付け/比較の動作を実装します。
- ちょうどそのため、デフォルトでは例えば共分散(継承とパラメトリックポリモーフィズムの概念が統一と同じデフォルトの分散挙動を得ることができること、それは考えられるか、その必要性はなく、不変アノテーションでほとんどの種類をマークする原因となります醜さを別のポイントに移動する)?あたかもデータ構造がデフォルトで不変になるかのように、これはより実用的でしょうか?
- 正式なシステムがあり、これは健全であることが証明されていますか?
- 具体的なプログラミング言語に関係なく、最も可能性の高い構文オプション/変更はどれですか?
- これと類似した動作例や言語はありますか?
書籍のおかげで、この本をまだ知りませんでした。私は基本的に、継承とppが異なるデフォルトを持つ同じ基盤概念を持ち、彼らの知覚されたユースケースに対して適合し、最適化されているのか疑問に思っています。 – soc
「いくつかの例でうまくいく」は排他的なものではありませんでした。この2つの概念がどうやって相互にやりとりできるかを、素敵で簡単な例にしてみました。私は文言をちょっと変えました。私はScalaを好きですが、実際のコンパイラにいくつかの健全性の問題を修正したいと思いますが、それを自分で行うために必要な天才の量は不足しています。 :-) – soc