【发布时间】:2022-01-02 18:35:37
【问题描述】:
我在 C++ 课后为了好玩而学习 rust,我想知道,use std::io 可以在将 rustc 版本更新到更新后破坏我的代码吗?
例如,在 C++ 中使用 using namespace std 是不好的,因为如果将新函数添加到 std,您的多个翻译单元代码可能会在编译器更新后中断,因为与您编写的函数名称相同的函数已添加到命名空间std.
但是在所有官方的 rust 教程中都使用了use std::io。
use std::io 可以破坏我的代码吗?
【问题讨论】:
-
??这没有任何意义,除非您导入特定的标识符,否则 rust 导入仍然必须是命名空间限定的。大约十年来我没有使用过 C++,但是 IIRC
using namespace std;很糟糕,因为没有资格将所有符号导入您当前的范围。注:您可以在 Rust 中使用星形导入,尽管 Rust 中没有任何东西像 C++ 中的std那样庞大,但它可能会遇到同样的问题。 -
@JaredSmith 好的,但是如果我们需要创建名为
io的板条箱(例如,我们正在编写某种解析器/任何东西)并在其中放入一些函数,它可能会中断? -
首先,没有。不要以标准库中的模块命名 crates。其次,永远不要使用明星进口,你会没事的。
-
所以约定只是不以
std的部分名称命名 crate 和/或不使用星号导入? -
@blonded04 没有理由你不能命名一个板条箱
io,由此产生的任何困难都可能在任何两个板条箱/模块之间造成,我在实践中从未遇到过这样的问题.如果确实存在问题,您可以随时使用::io消除 crate 的歧义。