Повторяющиеся имена членов перечисления в Cython - ошибка объявления?
Кажется, Cython не позволяет мне повторно использовать имена членов enum.
У меня есть следующие перечисления, которые я пытаюсь цитонизировать:
from enum import Enum
class Fruit(Enum):
UNKNOWN = 0
APPLE = 1
ORANGE = 2
class Animal(Enum):
UNKNOWN = 0
DOG = 1
CAT = 2
Но следующие результаты в 'UNKNOWN' redeclared
ошибка компиляции:
cpdef enum Fruit:
UNKNOWN = 0
APPLE = 1
ORANGE = 2
cpdef enum Animal:
UNKNOWN = 0
DOG = 1
CAT =
Как мне исправить вышеперечисленное?
Кроме того, я бы идеально хотел использовать NULL
в качестве имен членов перечисления вместо UNKNOWN
, Но похоже что NULL
является привилегированным ключевым словом для Cython, но не для CPython. Есть ли обходной путь?
1 ответ
Это не ограничение Cython, но язык C, на который переводится код Python.
В C перечисления не вводят новую область имен, и поэтому происходит конфликт имен, если вы используете тот же идентификатор.
Обычная стратегия заключается в использовании префикса для различения перечислений, например:
cpdef enum Fruit:
FRUIT_UNKNOWN = 0
cpdef enum Animal:
ANIMAL_UNKNOWN = 1