Два перечисления имеют некоторые общие элементы, почему это приводит к ошибке?

Из документация :

Spark также автоматически сохраняет некоторые промежуточные данные в операциях случайного воспроизведения (например, reduceByKey), даже без вызова пользователей, сохраняющихся. Это делается для того, чтобы избежать перекомпоновки всего входа, если узел не работает во время перетасовки. Мы по-прежнему рекомендуем пользователям переходить на результирующий RDD, если они планируют его повторно использовать.

blockquote>

Базовая файловая система также будет кэшировать доступ к диску.

29
задан moffeltje 25 June 2015 в 10:11
поделиться

8 ответов

Имена перечислений находятся в глобальной области видимости, они должны быть уникальными. Помните, что вам не нужно квалифицировать символы перечисления с именем перечисления, вы просто делаете:

Month xmas = December;

, а не:

Month xmas = Month.December;  /* This is not C. */

имена символов с именем enum:

enum Month { Month_January, Month_February, /* and so on */ };
35
ответ дан unwind 25 June 2015 в 10:11
поделиться

Я предлагаю вам объединить их:

enum Month {
  Jan, January=Jan, Feb, February=Feb, Mar, March=Mar, 
  Apr, April=Apr,   May,               Jun, June=Jun, 
  Jul, July=Jul,    Aug, August=Aug,   Sep, September=Sep, 
  Oct, October=Oct, Nov, November=Nov, Dec, December=Dec};

, которые будут иметь точно такой же эффект и более удобны.

Если вы хотите, чтобы январь имел значение 1 вместо 0, добавьте это:

enum Month {
  Jan=1, January=Jan, Feb, February=Feb, ....
29
ответ дан Alex Brown 25 June 2015 в 10:11
поделиться

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

struct Month { enum {January, February, March, April, May, June, July,
        August, September, October, November, December}; };
struct ShortMonth { enum {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec}; };
13
ответ дан Alexander Poluektov 25 June 2015 в 10:11
поделиться

То, что раскрутил, сказал. Но я также хотел бы сказать, что ваш пример выглядит как довольно необычное использование перечислений. Я не вижу значения, когда ShortMonth и LongMonth ссылаются на одно и то же - это будет иметь смысл для строк, но не для перечислений. Почему бы просто не иметь тип enum для одного месяца?

7
ответ дан 25 June 2015 в 10:11
поделиться

Мое предложение здесь - иметь только одно перечисление, так как они одного типа. Если вы хотите, чтобы короткие псевдонимы вводили меньше в вашем коде (даже если бы я не советовал вам это делать), вы можете сделать:

enum Month {
 January, Jan = January,
 February, Feb = February,
 March, Mar = March,
 April, Apr = April
 May,
 June, Jun = June,
 July, Jul = July,
 ...};

И иметь разные имена презентаций (короткие и длинные), у вас должно быть два разных строковых массива, которые индексируются перечислением.

char[MAX_MONTH_NAME_LENGTH][12] month_long_names = {
  "January", "February", ...
}

char[3][12] short_long_names = {
  "Jan", "Feb", ...
}

printf("month %d long name is %s, and short name is %s\n", May, long_month_names[May], short_month_names[May]);
3
ответ дан fortran 25 June 2015 в 10:11
поделиться

В C ++ 11 вы можете использовать объемные перечисления , чтобы исправить это. Это удалит имена из глобальной области видимости и поместит их в имя перечисления.

enum class Identity
{
       UNKNOWN = 1,
       CHECKED = 2,
       UNCHECKED =3
};

enum class Status
{
       UNKNOWN = 0,
       PENDING = 1,
       APPROVED = 2,
       UNAPPROVED =3
};

int main ()
{
    Identity::UNKNOWN;
    Status::UNKNOW;
}

Живой пример

2
ответ дан NathanOliver 25 June 2015 в 10:11
поделиться

В C перечисления используются без префикса типа, поэтому вы пишете:

month[0] = January;  
month[4] = May;

Перечисление Month и ShortMonth имеют одинаковую область видимости, поэтому компилятор не может знать, какой May использовать. Очевидным решением будет префикс перечислений, но я не уверен, что использование этих перечислений в этом случае оправдано.

1
ответ дан Morfildur 25 June 2015 в 10:11
поделиться
typedef enum {Jan, January, Feb, February, Mar, March, Apr, April, May, Jun, June, Jul, July,
    Aug, August, Sep, September, Oct, October, Nov, November, Dec, December} Month,ShortMonth;

Объединить их стать одним

-2
ответ дан cocoa 25 June 2015 в 10:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: