let_chains我正在尝试检测Rust 1.75 中是否启用了不稳定的功能(例如)。看起来cfg!(feature = "let_chains")应该这样做,但事实并非如此。看这个例子:
#![feature(let_chains)]
fn main() {
assert!(
dbg!(cfg!(feature = "let_chains")) || dbg!(cfg!(let_chains)),
"OK, then. How do you detect if an unstable feature is enabled?"
);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
[src/main.rs:5] cfg!(feature = "let_chains") = false
[src/main.rs:5] cfg!(let_chains) = false
thread 'main' panicked at src/main.rs:4:5:
OK, then. How do you detect if an unstable feature is enabled?
Run Code Online (Sandbox Code Playgroud)
有没有办法检测是否启用了不可用的功能?
对于更多背景知识,我在 proc 宏中执行此操作,因此我尝试cfg!()根据是否启用某些不稳定功能来生成正确的代码。我可以使用该#[cfg()]属性,如果它以某种方式起作用而cfg!宏不起作用的话。但我使用attribute得到了相同的结果#[cfg()]。
无法检测是否启用了某个不稳定功能。您所能做的就是检测用户是否正在每晚运行。
通常,正确的方法是在宏中添加 Cargo 功能,这将改变它扩展代码的方式。
或者,如果您可以将需要该功能的代码放入您自己的板条箱(proc-macro 的辅助板条箱,如通常所做的那样)中,则可以使用此板条箱的构建脚本来检测用户是否每晚运行,并且如果是,请启用该功能(针对您自己的板条箱)。