Rust 有没有办法对多个语句使用cfg(功能)检查?

Rust 有没有办法对多个语句使用cfg(功能)检查?,rust,Rust,有没有办法尽量减少以下功能检查 #[cfg(feature = "eugene")] pub mod eugene_set_steam_id; #[cfg(feature = "eugene")] pub mod eugene_balance; #[cfg(feature = "eugene")] pub mod eugene_force_map; #[cfg(feature = "eugene")] pub mod eugene_rating; #[cfg(feature = "eugene"

有没有办法尽量减少以下功能检查

#[cfg(feature = "eugene")]
pub mod eugene_set_steam_id;
#[cfg(feature = "eugene")]
pub mod eugene_balance;
#[cfg(feature = "eugene")]
pub mod eugene_force_map;
#[cfg(feature = "eugene")]
pub mod eugene_rating;
#[cfg(feature = "eugene")]
pub mod eugene_stat;
#[cfg(feature = "eugene")]
pub mod eugene_steam_id;
#[cfg(feature = "eugene")]
pub mod eugene_top;
例如:

#[cfg(feature = "eugene")] {
    pub mod eugene_set_steam_id;
    pub mod eugene_balance;
    pub mod eugene_force_map;
    pub mod eugene_rating;
    pub mod eugene_stat;
    pub mod eugene_steam_id;
    pub mod eugene_top;
}
这将更好地传达意义,更符合人体工程学。

提供了
cfg if应执行您所需操作的宏:

#[macro_use]
extern crate cfg_if;

cfg_if! {
    if #[cfg(feature = "eugene")] {
        pub mod eugene_set_steam_id;
        pub mod eugene_balance;
        pub mod eugene_force_map;
        pub mod eugene_rating;
        pub mod eugene_stat;
        pub mod eugene_steam_id;
        pub mod eugene_top;
    } else {
    }
}
事实上,它甚至用你的话来描述自己:

根据大量的
#[cfg]
参数,以人体工程学方式定义项目的宏。结构类似于if-else链,第一个匹配的分支是发出的项


您可以创建一个导入所有文件的专用模块,然后让父模块重新导出该专用模块中的所有内容:

#[cfg(feature = "eugene")]
#[path = ""]
mod reexport_eugene_modules {
    pub mod eugene_set_steam_id;
    pub mod eugene_balance;
    pub mod eugene_force_map;
    pub mod eugene_rating;
    pub mod eugene_stat;
    pub mod eugene_steam_id;
    pub mod eugene_top;
}

#[cfg(feature = "eugene")]
pub use reexport_eugene_modules::*;

不过,您仍然需要将该
#[cfg]
行写两次。

一个问题-为什么需要使用该
块?@VictorPolevoy,因为宏的定义是预期的。我不知道是否可以更改。实际上,我已经决定使用您的方法,因为它不需要依赖项,并且可以简单地使用语言本身来完成。不幸的是,它不适用于外部板条箱导入。