📜  pub 运行两次问题 (1)

📅  最后修改于: 2023-12-03 15:33:48.699000             🧑  作者: Mango

以 'pub 运行两次问题' 为主题

最近,一些 Rust 初学者遇到了一个关于 pub 的问题。他们经常会在 Rust 项目中使用 pub 关键字,但是当他们尝试运行代码时,会遇到运行两次的问题。这篇文章将介绍这个问题的原因以及如何避免它。

问题介绍

在 Rust 项目中,使用 pub 关键字可以将函数、变量、结构体等标记为公共的。这表示这些实体可以被其他模块或本地 crate 访问和使用。

然而,一些 Rust 初学者发现当他们在命令行中使用 cargo run 运行代码时,代码似乎被运行了两次。这不仅令人困惑,还可能导致不必要的副作用。

这是一个简单的示例程序,该程序使用 pub 关键字标记了一个变量:

pub fn main() {
    pub x: i32 = 42;
    println!("The value of x is: {}", x);
}

然而,当你在命令行中运行它时,你会发现输出显示了两次:

$ cargo run
The value of x is: 42
The value of x is: 42

这显然不是我们想要的结果。那么这个问题的原因是什么呢?

问题的原因

这个问题的根本原因是因为 pub 关键字不应该用在函数或变量中。它只应该用在结构体、枚举和 trait 等类型定义中。所以当你在函数或变量中使用 pub 时,实际上并没有起到任何作用,Rust 编译器也没有给你任何警告或错误信息。

因此,当你在代码中使用 pub 标记一个变量时,这个变量的作用域就会变成了全局的,而不是只在函数范围内可见。这意味着它将在整个程序中存在两个副本,因此会打印两次相同的输出。

如何避免这个问题

为了避免这个问题,你应该遵循 Rust 的最佳实践,并仅在类型定义中使用 pub 关键字。这样可以确保你的代码正常运行,也可以避免不必要的副作用和混乱。

在函数和变量中使用 pub 关键字并不是一个错误,但它不是 Rust 的惯例,也会导致不必要的问题。因此,如果你正在开始学习 Rust 或编写 Rust 代码,请确保只在类型定义中使用 pub 关键字,这将使你的代码更加清晰和可读。