Pergunta

Recentemente, Erik Meijer e outros mostraram como IObservable/IObserver é o dual de IEnumerable/IEnumerator.O fato de serem duais significa que qualquer operação em uma interface é válida na outra, fornecendo assim uma base teórica para o Extensões reativas para .Net

Existem outras interfaces duplas?Estou interessado em qualquer exemplo, não apenas baseado em .Net.

Foi útil?

Solução

Outro exemplo seria TextReader e TextWriter, embora haja ainda mais ruído do que no caso de observáveis ​​e enumeráveis.Em princípio, as assinaturas de tipo seriam:

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

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

Outras dicas

Outro exemplo é o tipo de produto AB e o tipo A+B de dois tipos A e B. em Haskell, você pode escrevê -los como:

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

Verifica aqui para detalhes

Covariância e contravariância são outro exemplo. Eu penso. Eu poderia estar errado.

Bart de Smet diz: "Muitas dualidades existem em várias disciplinas, proporcionando grandes transferências de conhecimento entre diferentes domínios. Por exemplo, na lógica formal, a lei de De Morgan permite a conversão de expressões construídas a partir de conjunções em aquelas construídas a partir de disjunções e vice -versa. Em eletrônicos, existem semelhanças Entre o comportamento dos capacitores e indutâncias: conheça um e como ir e voltar entre os domínios, e você conhece o outro. O cálculo de Fourier fornece duplos entre os domínios de tempo e frequência ". Interessante.

Eles também chamam de System.Reative o dual de System.interactive. Portanto, a maioria das funções em uma das assembléias tem seu duplo na outra. Para esclarecer, não é apenas que IO seja o dual do IE, mas as funções que operam nelas também são duvitalizadas.

Então, para responder à sua pergunta, existem muitas interfaces duplazadas. Você pode duplicar qualquer interface. Você apenas troca as entradas e saídas e a direção da função. Alguns não serão úteis ou serão o duplo de si mesmos. No entanto, às vezes existem realmente poderosos escondidos esperando para serem descobertos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top