使用标准库中的模块可以在我的包根中工作,但不能在模块中工作

时间:2016-11-26 00:28:09

标签: module rust constants

我可以在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.rsbar.rs位于同一文件夹中。

我做错了什么?

1 个答案:

答案 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,它不存在。

您可以通过两种主要方式解决此问题:

  1. 使用use std;语句将路径放入范围。请注意,语句默认使用绝对路径,因此 std::std

  2. 在每次使用时提供绝对路径:println!("{}", ::std::f64::NEG_INFINITY)