2010-11-11 2 views
2

я продолжаю находить себя решение что-то похожее на diamond inheritance problem следующим образом (но без какого-либо наследства!):Есть ли название для этого шаблона дизайна?

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

Для тех, кто не знаком с термином - [Проблема с алмазами] (http://en.wikipedia.org/wiki/Diamond_problem) – Oded

+0

Может быть, онтология? http://en.wikipedia.org/wiki/Ontology_%28information_science%29 – leppie

+0

@Jon - Вы упомянули термин во введении к вопросу. Я добавил ссылку. – Oded

ответ

Смежные вопросы