2017-02-23 54 views
1

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

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

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

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

в:

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

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

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

+0

Для чего это стоит, я думаю, что клип совершенно не прав, чтобы жаловаться на это; иногда вложенные ifs легче читать, чем цепочка 'else if'. Если вы в первую очередь обеспокоены чистым счетом здоровья от клипа, я бы поискал способ отключить эту ворсину (возможно, только для этого экземпляра). – trentcl

+0

Я пошел искать и [проблема] (https://github.com/Manishearth/rust-clippy/issues/798), чтобы отключить этот lint, когда есть комментарий во внешнем 'else'. – trentcl

ответ

3

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

 Смежные вопросы

  • Нет связанных вопросов^_^