gpt4 book ai didi

rust - 如何在不使用构建脚本的情况下仅为特定的 Rust 版本添加代码?

转载 作者:行者123 更新时间:2023-11-29 08:07:51 25 4
gpt4 key购买 nike

我使用 Rust 1.10 中出现的方法进行测试,但我希望我的箱子也适用于 1.7 版。

有没有办法(比如属性 #[cfg(min_version="1.10")])来指定只能在 Rust 1.10 或更新版本中运行的代码?

我可以使用构建脚本,但我不想要更复杂的构建,只是因为我想在旧的 Rust 版本上测试我的 crate 。

最佳答案

虽然除了构建脚本(以及 future 的过程宏)之外别无他法来检查编译器版本,但您可以使用功能标志手动启用和禁用代码。

通常您想使用一些新的编译器功能来提供旧编译器无法提供的新功能。在这种情况下,您可以将 cfg 属性与您定义的功能标志一起使用以启用代码。例如

#[cfg(feature = "foo")]
pub fn foo() {
cool_new_compiler_function();
}

在你的 Cargo.toml 中:

[features]
foo = []

像这样将代码隐藏在功能标志后面也适用于测试代码。在您的特定情况下,您可以交替引入 legacy 功能并使用如下现代代码禁用测试:

#[test]
#[cfg(not(feature = "legacy"))]
fn test_foo() {
Foo::foo();
}

然后在你运行的旧模式下运行测试:

cargo test --features "legacy"

请注意,后一种方式意味着您的测试不会默认在旧编译器上编译。对于普通(非测试)代码,添加这样一个遗留标志将是一个非常糟糕的破坏性更改。

关于rust - 如何在不使用构建脚本的情况下仅为特定的 Rust 版本添加代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com