为什么在不同的mod中找不到我的const变量

时间:2019-08-28 11:50:29

标签: rust

我在main.rs中定义了一个const变量,并希望在其他文件中使用它。

src/main.rs中,我定义了这样的const,无论是否发布,它都没有使用:

const CONFIG_GROUP: &str = "core.hydra.io";
pub const CONFIG_VERSION: &str = "v1alpha1";
pub const COMPONENT_CRD: &str = "componentschematics";

fn main() {
...
}

在另一个文件src/abc.rs中,我要使用此const。

无论是否使用::,都行不通。

println!("{}", COMPONENT_CRD); 
let component_resource = RawApi::customResource(COMPONENT_CRD)
    .within(top_ns.as_str())
    .group(::CONFIG_GROUP)
    .version(::CONFIG_VERSION);

它报告:

    |
208 |         println!("{}", COMPONENT_CRD);
    |                        ^^^^^^^^^^^^^ not found in this scope
error[E0425]: cannot find value `CONFIG_CRD` in this scope
   --> src/abc.rs:209:54
    |
209 |         let config_resource = RawApi::customResource(CONFIG_CRD)
    |                                                      ^^^^^^^^^^ not found in this scope

error[E0425]: cannot find value `CONFIG_VERSION` in the crate root
   --> src/abc.rs:210:24
    |
210 |             .version(::CONFIG_VERSION)
    |                        ^^^^^^^^^^^^^^ not found in the crate root

error[E0425]: cannot find value `CONFIG_GROUP` in the crate root
   --> src/abc.rs:211:22
    |
211 |             .group(::CONFIG_GROUP)
    |                      ^^^^^^^^^^^^ not found in the crate root

1 个答案:

答案 0 :(得分:1)

我假设我们正在谈论Rust 2018版本。我建议阅读Path clarity部分,尤其是这一部分:

  

前缀::先前指的是板条箱根或外部板条箱;现在,它明确地指的是一个外部箱子。例如,::foo::bar始终在外部包装箱bar中引用名称foo

使用不能使用::CONFIG_VERSION::main::CONFIG_VERSION等。几个选项:

  • 直接使用crate::CONFIG_VERSION
  • 将其导入use crate::CONFIG_VERSION,仅使用CONFIG_VERSION

abc.rs内容:

pub(crate) fn foo() {
    println!("{}", crate::CONFIG_VERSION);
}

另一个abc.rs变体:

use crate::CONFIG_VERSION;

pub(crate) fn foo() {
    println!("{}", CONFIG_VERSION);
}

main.rs内容:

pub(crate) const CONFIG_VERSION: &str = "v1alpha1";

mod abc;

fn main() {
    abc::foo()
}