Повторяющиеся имена членов перечисления в Cython - ошибка объявления? - PullRequest
0 голосов
/ 02 июня 2018

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 Ответ

0 голосов
/ 02 июня 2018

Это не ограничение cython, а языка C, на который переводится код python.

В C перечисления не вводят новую область имен, и, таким образом, происходит конфликт имен, если вы используететот же идентификатор.

Обычная стратегия заключается в использовании префикса для различия между перечислениями, например:

cpdef enum Fruit:
       FRUIT_UNKNOWN = 0

cpdef enum Animal:
      ANIMAL_UNKNOWN = 1
...