我不知道为什么不能用Rust 1.27.0编译此代码。
这是 test.rs ,因为它在我的硬盘上:
use std::{
self,
io::prelude::*,
net::{ TcpListener, TcpStream },
};
fn main() {}
尝试使用rustc test.rs
进行编译时的输出:
error[E0254]: the name `std` is defined multiple times
--> test.rs:2:5
|
2 | self,
| ^^^^ `std` reimported here
|
= note: `std` must be defined only once in the type namespace of this module
help: you can use `as` to change the binding name of the import
|
2 | self as other_std,
| ^^^^^^^^^^^^^^^^^
warning: unused imports: `TcpListener`, `TcpStream`, `io::prelude::*`, `self`
--> test.rs:2:5
|
2 | self,
| ^^^^
3 | io::prelude::*,
| ^^^^^^^^^^^^^^
4 | net::{TcpListener, TcpStream},
| ^^^^^^^^^^^ ^^^^^^^^^
|
= note: #[warn(unused_imports)] on by default
答案 0 :(得分:5)
这在Rust 2018中很好用。您可能只想通过在pip install -r requirements.txt
上添加edition = "2018"
或在Cargo.toml
上添加--edition=2018
来进行更新调用。下面是为什么在Rust 2015中这种方法不起作用的答案。
来自the std::prelude
documentation:
在技术层面上,Rust插件
rustc
进入每个板条箱的板条根,并且
extern crate std;
进入每个模块。
查看代码after macro expansion(例如通过use std::prelude::v1::*;
)时,您也可以看到它的作用。对于您的代码,结果为:
cargo-expand
如您所见,由于#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use std::prelude::v1::*;
#[macro_use]
extern crate std;
// No external crates imports or anything else.
use std::{
self,
net::{TcpListener, TcpStream},
};
fn main() {
// Empty.
}
语句,std
已在范围内。因此,再次导入它会导致此错误。