11

最近、Erik MeijerらIObservable/IObserverは、のデュアルがどのようになっているのかを示していますIEnumerable/IEnumerator。それらがデュアルであるという事実は、一方のインターフェイスでのすべての操作がもう一方のインターフェイスでも有効であることを意味します。したがって、.Netのリアクティブエクステンションの理論的基盤を提供します。

他のデュアルインターフェイスは存在しますか?.Netベースだけでなく、あらゆる例に興味があります。

4

3 に答える 3

3

別の例はとですが、観測量TextReaderTextWriter列挙可能値の場合よりもさらに多くのノイズがあります。原則として、型アノテーションは次のようになります。

interface ITextReader {
  // Read: void -> int
  int Read();
}

interface ITextWriter {
  // Write: int -> void
  void Write(int val);
}
于 2010-01-24T02:42:34.507 に答える
3

もう1つの例は、製品タイプABと、2つのタイプAとBの合計タイプA + Bです。Haskellでは、次のように記述できます。

data Prod a b = P a b -- this is the same as the pair type (a,b)

data Sum a b = Left a | Right b -- the same as the Either a b type

詳細はこちらをご覧ください

于 2010-01-24T15:07:55.173 に答える
2

共変性と反変性は別の例です。おもう。私は間違っている可能性があります。

Bart De Smetは、次のように述べています。エレクトロニクス、コンデンサーとインダクタンスの振る舞いの間には類似点があります。一方を知っていて、ドメイン間を行き来する方法を知っていて、もう一方を知っています。フーリエ計算は、時間ドメインと周波数ドメインの間に双対を提供します。」面白い。

また、System.ReactiveをSystem.Interactiveのデュアルと呼びます。したがって、一方のアセンブリのほとんどの機能は、もう一方のアセンブリではデュアルになっています。明確にするために、IOがIEのデュアルであるだけでなく、それらを操作する機能もデュアル化されています。

したがって、あなたの質問に答えるために、多くの二重化されたインターフェースが存在します。任意のインターフェースを二重化できます。入力と出力、および関数の方向を入れ替えるだけです。役に立たないものもあれば、それ自体の二重になるものもあります。しかし、時には、明らかになるのを待って隠れている本当に強力なものがあります。

于 2010-03-19T20:49:53.620 に答える