В настоящее время создается вариант объекта типа, подобного этому:
type
FooKind = enum a, b, c
Foo = object
case kind: FooKind
of a:
bar, a: int
of b:
bar, b: int
of c:
c: int
приводит к ошибке:
Ошибка: попытка переопределить: 'bar'
потому что разные ветви варианта не могут совместно использовать поля. Есть открытый вопрос об этом , но так как ему более 3 лет, и он все еще не решен, я не задерживаю дыхание.
Я вижу несколько возможных альтернатив:
- Создание общих полей для всех вариантов, что приведет к загрязнению некоторых вариантов ненужными полями:
type
FooKind = enum a, b, c
Foo = object
bar: int
case kind: FooKind
of a:
a: int
of b:
b: int
of c:
c: int
type
FooKind = enum a, b, c
Foo[K: static[FooKind]] = object
when K == a:
bar, a: int
elif K == b:
bar, b: int
elif K == c:
c: int
- Использование обычного наследования объектов:
type
FooKind = enum a, b, c
FooBase = object
kind: FooKind
FooA = object of FooBase
bar, a: int
FooB = object of FooBase
bar, b: int
FooC = object of FooBase
c: int
Какие есть другие варианты решения этой проблемы?