< 返回版块

abliger 发表于 2023-03-27 09:31

Tags:extern

我看到一些包在 readme 中有这种话,添加下面的语句到 root 文件中。

extern crate glob;

但直接使用 use 关键字也能使用外部依赖的内容,这只是为了在没有添加依赖时,给编译提示吗?

评论区

写评论
作者 abliger 2023-03-27 10:00

谢谢

--
👇
苦瓜小仔:

首先阅读 Reference 的资料:

https://doc.rust-lang.org/reference/items/extern-crates.html

https://doc.rust-lang.org/reference/names/preludes.html#extern-prelude

官方论坛很多类似的提问:

https://users.rust-lang.org/t/usage-of-extern-crate/73619/8

https://users.rust-lang.org/t/does-extern-crate-serve-any-purpose-in-the-2021-edition/73667/5

简单来说,它是 Rust 引入库的一种方式,但现在除了少数情况,并不主张显式使用。

Cargo.toml 的 depencies 表让你无需再写一遍 extern crate (这是 2018 edition 改变的)。

少数情况下必须使用 extern crate 比如(假设在 root 模块声明):

  • 引入非 Cargo 引入的依赖,比如 std, alloc, core, proc_macro, rustc 等库
  • extern crate a as b 给引入的依赖一个全局别名
  • extern crate self as name 给当前项目一个全局别名
  • #[macro_use] extern crate a 全局引入依赖中所有宏
苦瓜小仔 2023-03-27 09:52

首先阅读 Reference 的资料:

https://doc.rust-lang.org/reference/items/extern-crates.html

https://doc.rust-lang.org/reference/names/preludes.html#extern-prelude

官方论坛很多类似的提问:

https://users.rust-lang.org/t/usage-of-extern-crate/73619/8

https://users.rust-lang.org/t/does-extern-crate-serve-any-purpose-in-the-2021-edition/73667/5

简单来说,它是 Rust 引入库的一种方式,但现在除了少数情况,并不主张显式使用。

Cargo.toml 的 depencies 表让你无需再写一遍 extern crate (这是 2018 edition 改变的)。

少数情况下必须使用 extern crate 比如(假设在 root 模块声明):

  • 引入非 Cargo 引入的依赖,比如 std, alloc, core, proc_macro, rustc 等库
  • extern crate a as b 给引入的依赖一个全局别名
  • extern crate self as name 给当前项目一个全局别名
  • #[macro_use] extern crate a 全局引入依赖中所有宏
作者 abliger 2023-03-27 09:49

好的谢谢

--
👇
HC97: 外部预导入包

版次差异:在 2015 版中,在外部预导入包中的 crate 不能通过 use声明来直接引用,因此通常标准做法是用 extern crate 将那它们纳入到当前作用域。从 2018 版开始, use声明可以直接引用外部预导入包里的 crate,所以再在代码里使用 extern crate 就会被认为是不规范的。

似乎是版本问题,现在已经不需要了

HC97 2023-03-27 09:46

外部预导入包

版次差异:在 2015 版中,在外部预导入包中的 crate 不能通过 use声明来直接引用,因此通常标准做法是用 extern crate 将那它们纳入到当前作用域。从 2018 版开始, use声明可以直接引用外部预导入包里的 crate,所以再在代码里使用 extern crate 就会被认为是不规范的。

似乎是版本问题,现在已经不需要了

1 共 4 条评论, 1 页