作者回复: 👍
作者回复: 不重名肯定不会遮蔽。但是实际编码中,一些常用的功能变量,比如表示错误的err、表示下标的i,表示key和value的k、v等,如果要做不同命名,很容易在代码中出现大量的k1,v1,k2,v2等,阅读起来总是感觉缺少了一些优雅感。不知你是否有同感。
作者回复: 👍
作者回复: 也算是一个办法。前提是明确规则,且大家都遵守。这样才能在协作中,减少遮蔽问题的发生频度。
作者回复: 正确✅
作者回复: 预定义标识符可以被重新定义。 比如 var new int = 5 这时new就是一个变量。 但关键字不可以做标识符。 你不能用for作为变量名: var for int = 5 // error
作者回复: 有一点提醒一下:既然我们知道了new是预定义的标识符,我们在日常编写代码中尽量要避免重新定义new.
作者回复: 其实这是一个编程通用原则,利于提升可读性
作者回复: 我倒是觉得“宇宙代码块”更形象生动罒ω罒。否则go官方也不会用universe block,而会用global block了。 另外代码块不要与作用域混淆。包代码块中声明的首字母大写的标识符实际是也是拥有全局作用域的,可以被任意其他代码所引用的。
作者回复: 好问题!不过这是编程语言设计范畴的问题,我不是编程语言设计专家,不能从原理上给予解释。但从目前情况来看,似乎没有哪门编程语言禁止不同作用域的同名变量声明,显然这是一个语言设计与实现的惯例。