Есть ли название для этого шаблона дизайна? - PullRequest
2 голосов
/ 11 ноября 2010

Я все время решаю что-то похожее на проблему наследования алмазов (но без какого-либо наследования!) Следующим образом:

  type I<'a> =
     abstract member Foo : 'a

  type a =
     | A

     interface I<a> with
        member this.Foo = this

  type b =
     | B

     interface I<b> with
        member this.Foo = this

Общность между типами a и b раскрывается через интерфейс I<_>, но члены интерфейса могут возвращать значения определенных базовых типов a или b, вместо того, чтобы обобщать любой тип, реализующий интерфейс.

Например, это возвращает значение типа a:

> (A :> I<_>).Foo;;
val it : a = A

и это возвращает значение типа b:

> (B :> I<_>).Foo;;
val it : b = B

, хотя значения были переданы в тип интерфейса.

Есть имя для этого? Другие люди делают это?

1 Ответ

0 голосов
/ 22 декабря 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...