为什么未声明“std”模块

  • 本文关键字:std 模块 未声明 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);

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

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

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

如果您正在使用子路径,例如在模块中多次std::io,通常最好将其use在顶部。

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

最新更新