我在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
答案 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()
}