【问题标题】:What is the rationale behind allowing variable shadowing in Rust? [closed]在 Rust 中允许变量阴影的基本原理是什么? [关闭]
【发布时间】:2020-01-22 13:06:26
【问题描述】:

在 Rust 中,encouraged 隐藏变量:

但是等等,程序不是已经有一个名为guess的变量了吗?它 确实如此,但 Rust 允许我们用 新的。

这个功能会不会引入类似的问题:

  • 难以遵循的代码(更容易产生错误)
  • 在打算访问不同变量时访问变量(产生错误)

我根据自己的经验和以下来源提供了这些信息:12345

决定包含变量阴影的根本原因是什么?

创建guess 而不是guess_strguess_int 确实有其优势。有优点也有缺点。

是什么让 Rust 的发明者相信利大于弊?

编程界似乎对此存在分歧;有些语言只发出警告并阻止阴影,有些语言明确禁止它,有些允许它,有些甚至鼓励它。原因是什么?

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

  • 有哪些优点/缺点?
  • 影子变量有哪些用例?
  • 什么时候不在 Rust 中使用它们?
  • 来自不同编程背景的不同人必须记住什么? (以及哪些陷阱不能落入)

【问题讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • 本书清楚地展示了他们的决定背后的原因,但您提出问题的方式使其显得固执且不精确。阴影允许我们重用变量名而不是创建唯一的变量名;它允许我们在不使变量变为 mut 的情况下转换变量;它让我们无需手动创建两个不同类型的变量就可以转换类型(通过自动化使事情变得简洁);阴影是可选的(您不必这样做)并且不是非常复杂或难以阅读。如果阴影确实存在问题,您是否考虑过一次只询问一个问题?
  • @Wolfpack'08 感觉好像你没有读过这个问题,我知道为什么这个例子使用了阴影。如果您比标题进一步阅读,那么您就会知道我在询问将阴影 at all 包含到 Rust 中的基本原理。

标签: rust paradigms


【解决方案1】:

因为it was initially supported and never removed

这更像是我们从未禁止过影子,因为它只是脱离了编译器的实现。

我记得,Graydon 提出了禁止阴影的想法,但我坚持使用该功能,没有其他人真正关心,所以它留下了。

- pcwalton

另见:

【讨论】:

  • 并不是说我对这个家伙的期望会更低。得到我的支持,先生。
  • @MarcoBonelli 这里没什么特别的,我只是在 Google 上搜索了rust rfc shadowing,然后点击了第六个链接,然后复制并粘贴了报价。 :-)
猜你喜欢
  • 2016-05-20
  • 2022-01-27
  • 1970-01-01
  • 2010-11-08
  • 2011-07-19
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
相关资源
最近更新 更多