我在Cargo.toml
中指定了一些功能:
[features]
complex = []
simple = []
当我构建项目时,我使用cargo build --features="complex"
或simple
。
在某些功能中,我想根据使用的功能返回一个值:
fn test() -> u32 {
let x: u32 = 3;
if cfg!(feature = "complex") {
let y: u32 = 2;
x + y
}
if cfg!(feature = "simple") {
let y: u32 = 1;
x + y
}
}
但这不起作用,因为它试图评估两个表达式。在我的案例中使用cfg!
宏的正确方法是什么?
答案 0 :(得分:3)
配置标志的布尔评估。
这意味着cfg!(...)
被替换为布尔值(true
/ false
)。在扩展后,您的代码看起来像这样:
fn test() -> u32 {
let x = 3;
if true {
let y = 2;
x + y
}
if true {
let y = 1;
x + y
}
}
最简单的解决方案是添加else
:
fn test() -> u32 {
let x = 3;
if cfg!(feature = "complex") {
let y = 2;
x + y
} else {
let y = 1;
x + y
}
}
因为它试图评估两个表达式。
不,它没有。评估在运行时进行,甚至无法编译此代码。
另见: