【问题标题】:Equivalent of -DPREPROC_VAR for rust/cargo相当于 -DPREPROC_VAR 用于铁锈/货物
【发布时间】:2023-01-25 01:12:26
【问题描述】:

我有一个 const 变量,我需要在运行时对其进行硬编码,但可在编译时对其进行配置。在 C/C++ 风格的预处理器中,通常可以告诉编译 -DPREPROC_VAR 并用 #ifndef 保护定义

#ifndef MAX_TRHEADS
#define MAX_THREADS 1000
#endif

在生锈我有

// Doesn't actually work because I need a usize.
const MAX_THREADS: usize = std::env!("MYLIB_MAX_THREADS");

但我不知道如何为它设置默认值。我尝试在 Cargo.toml 的 [env] 部分设置 MYLIB_MAX_THREADS 但它没有用。

【问题讨论】:

    标签: rust constants rust-cargo


    【解决方案1】:

    env! 要求变量在这里,所以默认值没有意义。然而option_env!它可能是有道理的:

    const MAX_THREADS: &'static str = {
        if let Some(x) = std::option_env!("MYLIB_MAX_THREADS") {
            x
        } else {
            "42"
        }
    };
    

    【讨论】:

    • 我打算建议将其缩短为 std::option_env!("MYLIB_MAX_THREADS").unwrap_or("42"),但不幸的是 unwrap_or isn't const yet 稳定。不过,希望有一天 :)
    • 我真的需要一个 usize though。 &str 不会削减它。有没有const的方法来解析&str
    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多