я продолжаю находить себя решение что-то похожее на 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
даже если значения были восходящее преобразование к типу интерфейса ,
Есть ли название для этого? Другие люди делают это?
Для тех, кто не знаком с термином - [Проблема с алмазами] (http://en.wikipedia.org/wiki/Diamond_problem) – Oded
Может быть, онтология? http://en.wikipedia.org/wiki/Ontology_%28information_science%29 – leppie
@Jon - Вы упомянули термин во введении к вопросу. Я добавил ссылку. – Oded