如果当前的Rust编译器已经稳定,我需要在实验性功能上删除换行符。是否有可能做到这一点?
#![cfg_attr(rustversion::nightly, feature(type_name_of_val))]
如果当前的Rust编译器已经稳定,我需要在实验性功能上删除换行符。是否有可能做到这一点?
#![cfg_attr(rustversion::nightly, feature(type_name_of_val))]
感谢Rust论坛,我已经找出解决问题的两种方法:
[features]
nightly = []
default = [ "nightly" ]
我选择了名字为nightly
,但这只是任意的。特性default
描述了哪些功能是默认开启的。
rustc
特性:#![ cfg_attr( feature = "nightly", feature( type_name_of_val ) ) ]
feature = "nightly"
指向之前在文件中声明的功能。
feature( type_name_of_val )
- 声明此不稳定的rustc
特性。
注意:应在整个可执行文件的根文件开头声明rustc
不稳定特性。否则,您将收到以下错误信息:crate-level attribute should be in the root module。
rustc
特性:#[ cfg( feature = "nightly" ) ]
println!( "{} is {}", i, std::any::type_name_of_val( &i ) );
#[ cfg(feature = "nightly") ]
会告诉编译器,如果自定义特性 nightly
被禁用,则删除相关联的行。在我们的情况下,特性 nightly
在 cargo
文件 default = ["nightly"]
中默认开启。
RUSTFLAGS
条件地启用 rustc
特性?rustc
特性:#![ cfg_attr( nightly, feature( type_name_of_val ) ) ]
nightly
指的是 Rust 编译器的夜间版本,可通过 --cfg
标志 进行引用。
feature(type_name_of_val)
- 声明使用了这个不稳定的 rustc
特性。
注意:应在整个可执行文件的开始处声明 rustc
不稳定特性。否则,将会出现 crate-level attribute should be in the root module。
rustc
特性:#[ cfg( nightly ) ]
println!( "{} is {}", i, std::any::type_name_of_val( &i ) );
#[ cfg( nightly ) ]
用于告诉编译器,如果rustc
没有得到cfg
nightly
,则删除相关的代码行。我们接下来会通过环境变量RUSTFLAGS
来传递它。
RUSTFLAGS
运行可执行文件。RUSTFLAGS="--cfg nightly" cargo run
RUSTFLAGS="--cfg nightly"
告诉 Cargo 将参数--cfg nightly
传递给编译器。
[depedencies]
rustversion = "1"
#![rustversion::attr(nightly), feature(type_name_of_val))]
#[cfg(version(...))]
。它曾经包括一个#[cfg(nightly)]
标志,但现在不再包括。