为什么`std`模块未声明?

时间:2016-04-07 12:52:05

标签: rust

我试图从stdin读取单个字符,但我无法正常工作。在不同的程序中,我使用了这种完全相同的方法,并且它起作用了。

let mut buffer = [0];
let _ = std::io::stdin().read(&mut buffer);
let a = buffer[0];

编译它会出现此错误:

src/befunge.rs:220:17: 220:31 error: failed to resolve. Use of undeclared type or module `std::io` [E0433]
src/befunge.rs:220      let _ = std::io::stdin().read(&mut buffer);

1 个答案:

答案 0 :(得分:20)

我认为befunge.rs不是你的箱子根,而是一个子模块。在std::io::stdin()声明之外使用的use ...;之类的路径是相对于当前模块的,而不是绝对的。要使路径为绝对路径,前缀:: (与unix路径中的前缀/一样) - > ::std::io::stdin()。或者,您可以use路径的某些部分,例如:

use std;
std::io::stdin();

use std::io;
io::stdin();

如果您在模块中多次使用std::io这样的子路径,通常最好将use放在顶部。

如果您位于crate根目录中,::stdstd之间没有区别,因为相对查找路径是根。它只在子模块中很重要。另外:use声明中的路径始终是绝对的 - 使它们相对于当前模块前缀self::