我可以在std::f64::NEG_INFINITY
中引用main.rs
,但没有问题。但是,如果另一个模块引用相同的常量,编译器会抱怨:Use of undeclared type or module 'std::f64'
。
这是我的main.rs
:
mod bar;
fn main() {
println!("{}", std::f64::NEG_INFINITY);
}
这是我的bar.rs
:
fn foo() {
println!("{}", std::f64::NEG_INFINITY);
}
main.rs
和bar.rs
位于同一文件夹中。
我做错了什么?
答案 0 :(得分:1)
无需单独的文件;这是一个复制品:
fn main() {}
mod bar {
fn foo() {
println!("{}", std::f64::NEG_INFINITY);
}
}
在您的箱子的根部,std
包被自动导入the prelude的一部分。从根开始插入路径 std
。
然而,一旦开始在模块中编写代码,就不再是根目录了,当你尝试使用某个项时,默认情况下路径是相对的。因此,在mod bar
内,路径std::f64::NEG_INFINITY
将是绝对路径::bar::std::f64::NEG_INFINITY
,它不存在。
您可以通过两种主要方式解决此问题:
使用use std;
语句将路径放入范围。请注意,此语句默认使用绝对路径,因此此 std
为::std
。
在每次使用时提供绝对路径:println!("{}", ::std::f64::NEG_INFINITY)
。