如何检测是否启用了不稳定功能?

Dan*_*iel 6 rust

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()]

Cha*_*man 2

无法检测是否启用了某个不稳定功能。您所能做的就是检测用户是否正在每晚运行。

通常,正确的方法是在宏中添加 Cargo 功能,这将改变它扩展代码的方式。

或者,如果您可以将需要该功能的代码放入您自己的板条箱(proc-macro 的辅助板条箱,如通常所做的那样)中,则可以使用此板条箱的构建脚本来检测用户是否每晚运行,并且如果是,请启用该功能(针对您自己的板条箱)。