我想知道,为什么有时我们需要使用extern crateover use?我正在使用板条箱wee_alloc并导入我必须使用的模块extern crate:
extern crate wee_alloc;
// Use `wee_alloc` as the global allocator.
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
Run Code Online (Sandbox Code Playgroud)
但是web_sys我可以只使用use.
Ibr*_*med 29
tldr:你不需要写下去的extern箱外部的依赖关系在2018年锈没有你提供的代码extern crate与作品就好edition = "2018"在你的集合Cargo.toml
extern crate您不再需要编写extern crate将 crate 导入到您的项目中。前:
// Rust 2015
extern crate futures;
mod foo {
use futures::Future;
}
Run Code Online (Sandbox Code Playgroud)
后:
// Rust 2018
mod foo {
use futures::Future;
}
Run Code Online (Sandbox Code Playgroud)
extern crate 的另一个用途是导入宏;不再需要了。在 Rust 2015 中,你会这样写:
// Rust 2015
#[macro_use]
extern crate log;
fn main() {
error!("oops");
}
Run Code Online (Sandbox Code Playgroud)
现在,你写:
// Rust 2018
use log::error;
fn main() {
error!("oops");
}
Run Code Online (Sandbox Code Playgroud)
如果您一直使用as这样重命名您的箱子:
extern crate futures as fut;
Run Code Online (Sandbox Code Playgroud)
然后在 Rust 2018 中,您只需执行以下操作:
use futures as fut;
use fut::Future;
Run Code Online (Sandbox Code Playgroud)
这个规则有一个例外,那就是“sysroot”包。这些是随 Rust 本身分发的板条箱。现在,您仍然需要使用extern crate这些 crate:
proc_macrocorestd但是,extern crate std并且extern crate core已经是隐式的,因此您很少需要手动声明它们。
最后,在每晚,您将需要它用于以下板条箱:
alloctest这些是规则的唯一例外。因此,您提供的代码extern crate在 Rust 2018 中没有问题:
extern crate futures as fut;
Run Code Online (Sandbox Code Playgroud)
仅仅因为您安装了最新的 Rust版本并不意味着您正在使用最新版本进行编译。要告诉 Cargo 使用特定版本,请设置edition键/值对。例如:
use futures as fut;
use fut::Future;
Run Code Online (Sandbox Code Playgroud)
如果没有edition密钥,Cargo 将默认使用 Rust 2015。但在这种情况下,我们选择了 2018,因此我们的代码使用 Rust 2018 编译!感谢@KevinReid 指出这一点
这个答案来自Rust 版指南
| 归档时间: |
|
| 查看次数: |
2081 次 |
| 最近记录: |