variables - 为什么存在下划线前缀变量?

标签 variables rust unused-variables

我正在学习 Rust,并且遇到这样一个事实,即在变量名开头添加下划线会使编译器在未使用时不会发出警告。我想知道为什么存在该功能,因为不使用未使用的变量是不受欢迎的。

最佳答案

我可以看到几个原因:

  • 您正在调用一个返回 #[must_use] 类型的函数,但在您的特定情况下,您知道可以安全地忽略该值。可以为此使用 _ 模式(这不是变量绑定(bind),它是自己的模式,但这可能是下划线前缀约定的来源),但您可能想要记录为什么忽略该值,或者该值是什么。根据我的经验,这在测试中尤为常见。
  • 函数参数:您可能必须为参数命名,因为它是 API 的一部分,但实际上并不需要使用它。 Anonymous parameters were removed in the 2018 edition.
  • 宏。在宏中创建的变量以后可能会或可能不会被使用。无法在宏调用中消除警告会很烦人。在这种情况下,有一个将下划线加倍的约定,例如由 clippy 的 used_underscore_binding 强制执行。 Lint 。
  • RAII。您可能希望为它的析构函数副作用而存在一个变量,但不要以其他方式使用它。对于这个用例,不可能简单地使用 _,因为 _ 不是变量绑定(bind),并且值不会在封闭 block 的末尾被丢弃,因为具有变量绑定(bind)。

关于variables - 为什么存在下划线前缀变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48361537/

相关文章:

java - 如何获取java变量的更新值?

perl - 这是 Perl 的解释错误吗?

cookies - 为什么 “rust cookie::CookieJar”可以通过str类型获取值

scala - 为未使用的变量使用占位符时出现 MatchError

c - Rust 的 (void) 变量替代品

ios - Swift 计算属性返回值

sqlite - 无法在循环 : use of moved value and cannot borrow as mutable more than once at a time 内构建 rusqlite 事务

rust - 如何将 wasm 特定的宏与函数和结构分离

python - Silence PyLint 关于未使用的字符串插值变量的警告

c++ - 引用未初始化的内存而不访问它是否合法?