在Rust中,阴影变量为encouraged:

但是等等,这个程序不是已经有一个名为guess的变量了吗?信息技术

这项功能会不会带来以下问题:

  • 难以理解的代码(更容易创建bug)
  • 当一个人打算访问另一个变量时访问变量(会产生错误)

我根据自己的经验和以下来源获得了这些信息:1 2 3 4 5

决定加入变量跟踪的潜在原因是什么?

它的优势在于只创造guess个,而不是guess_strguess_int.有优点也有缺点.

What convinced the inventors of Rust that the advantages are greater than the disadvantages?

编程界对此似乎存在分歧;有些语言只发出警告,不鼓励跟踪,有些语言明确禁止跟踪,有些语言允许跟踪,有些语言甚至鼓励跟踪.原因是什么?

如果可能的话,我想了解更多,完整的答案可能包括:

  • 有哪些优点/缺点?
  • 阴影变量的用例是什么?
  • 什么时候不用它们Rust ?
  • 不同编程背景的人需要记住什么?(以及不应落入的trap )

推荐答案

因为it was initially supported and never removed:

这更像是我们从未禁止过阴影,因为它刚刚从编译器的实现中消失.

我记得,格雷登提出了禁止暗影的 idea ,但我坚持了这一点,没有其他人真正在乎,所以它留下来了.

- pcwalton

另见:

Rust相关问答推荐

泛型属性比较

如何创建引用构造函数拥有的变量的对象?

如何在Rust中表示仅具有特定大小的数组

在Rust中有没有办法在没有UB的情况下在指针和U64之间进行转换?

无法定义名为&new&的关联函数,该函数的第一个参数不是self

铁 rust ,我的模块介绍突然遇到了一个问题

rust 蚀生命周期 不匹配-不一定超过此处定义的生命周期

为什么我需要 to_string 函数的参考?

根据掩码将 simd 通道设置为 0 的惯用方法?

仅在使用 &mut 或线程时borrow 的数据在闭包之外转义?

方法可以被误认为是标准特性方法

Rust中如何实现一个与Sized相反的负特性(Unsized)

实现泛型的 Trait 方法中的文字

切片不能被 `usize` 索引?

Rust 引用元组和引用元组

用逗号分隔字符串,但在标记中使用逗号

匹配结果时的简洁日志(log)记录

火箭整流罩、tokio-scheduler 和 cron 的生命周期问题

为什么可以从闭包中返回私有 struct

为什么 Rust 标准库同时为 Thing 和 &Thing 实现特征?