Возможна ли «функция» уровня файла или модуля?

Некоторые оптимизации/алгоритмы делают код значительно менее читаемым, поэтому полезно иметь возможность отключать сложную и громоздкую функциональность в файле/модуле, чтобы любые ошибки, возникающие при изменении этого кода, можно было быстро протестировать на простом коде.

В настоящее время использование const USE_SOME_FEATURE: bool = true; кажется разумным способом, но код читается немного странно, поскольку USE_SOME_FEATURE используется как ifdef в C.

Например, clippy хочет, чтобы вы написали:

if foo {
    { ..other code.. }
} else {
    // final case
    if USE_SOME_FEATURE {
        { ..fancy_code.. }
    } else {
        { ..simple_code.. }
    }
}

As:

if foo {
    { ..other code.. }
} else if USE_SOME_FEATURE {
    // final case
    { ..fancy_code.. }
} else {
    // final case
    { ..simple_code.. }
}

Что, ИМХО, ухудшает читабельность и может быть проигнорировано, но вызвано использованием логического значения, где feature может иметь больше смысла.

Есть ли способ показать функцию в файле, не указывая ее в ящике?
(поскольку это только для внутренней отладки и тестирования изменений в коде).


person ideasman42    schedule 23.02.2017    source источник
comment
Что бы это ни стоило, я думаю, что clippy абсолютно не прав, жалуясь на это; иногда вложенные if легче читать, чем цепочку else if. Если вас в первую очередь беспокоит чистота здоровья от clippy, я бы поискал какой-нибудь способ отключить этот ворс (вероятно, только в этом случае).   -  person trentcl    schedule 23.02.2017
comment
Я поискал и нашел проблему, чтобы отключить этот ворс, когда есть комментарий во внешнем else.   -  person trentcl    schedule 23.02.2017


Ответы (1)


Вы можете использовать скрипт сборки для создания новых условий cfg. Используйте println!("cargo:rustc-cfg=whatever") в сценарии сборки, а затем вы можете использовать #[cfg(whatever)] в своих функциях и операторах.

person durka42    schedule 23.02.2017