Question

Récemment Erik Meijer et d'autres ont montrer comment IObservable/IObserver est le double de IEnumerable/IEnumerator. Le fait qu'ils sont à double signifie que toute opération sur une interface est valable sur l'autre, fournissant ainsi une base théorique pour le Extentions réactifs pour .Net

Est-ce que d'autres interfaces doubles existent? Je suis intéressé par un exemple, non seulement .Net basé.

Était-ce utile?

La solution

Un autre exemple serait TextReader et TextWriter, bien qu'il y ait encore plus de bruit que dans le cas de enumerables et observables. En principe, les signatures de type seraient:

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

interface ITextWriter {
  // Write: int -> void
  void Write(int val);
}

Autres conseils

Un autre exemple est le type de produit A.b et le type de somme A + B de deux types A et B. Dans Haskell vous pouvez les écrire comme:

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

pour plus de détails

Covariance et contravariance est un autre exemple. Je pense. Je peux me tromper.

Bart De Smet dit : « Beaucoup de dualités existent dans diverses disciplines, prévoyant des grands transferts de connaissances entre les différents domaines. dans l'électronique, des similitudes existent entre le comportement des condensateurs et inductances par exemple, dans la logique formelle, de la loi de Morgan permet de convertir des expressions construites à partir conjonctions en celles construites à partir disjonctions, et vice versa. : connaître et comment aller et venir entre les domaines, et vous savez que l'autre calcul de Fourier fournit duales entre les domaines de temps et de fréquence « .. Intéressant.

Ils appellent également System.Reactive le double de System.Interactive. Ainsi, la plupart des fonctions dans l'un des ensembles a il est double dans l'autre. Pour clarifier, il est pas seulement que IO est le double de IE, mais les fonctions qui fonctionnent sur eux sont également dualisée.

Pour répondre à votre question, de nombreuses interfaces dualisées existent. Vous pouvez dualize toute interface. Vous échangez simplement les entrées et les sorties et la direction de la fonction. Certains ne seront pas utiles, ou sera le double d'eux-mêmes. Cependant, parfois il y en a vraiment puissants qui se cachent en attendant d'être découvert.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top