Variable Shadowing(变量遮蔽)是编程语言中比较常见的一种情况,但是由于不同语言对于这个情景的处理是不同的,所以在具体语言中这个Variable Shadowing(变量遮蔽)的表现也是不同的。

简单的说,Variable Shadowing(变量遮蔽)就是指之前已经定义了一个变量并赋值,然后再后面又重新定义和赋值,然后这就是Variable Shadowing(变量遮蔽)。

在C语言中:

声明了一个类型的变量并定义赋值,在同一命名空间范围内是不能重新声明和定义的,但是可以赋值操作,并且可以通过指针操作改变该变量的底层存储的变量类型(该变量的类型依旧保持不变,因此在使用该变量时需要强制转换)。在上一层命名空间定义的变量是不影响下层命名空间内重新定义并赋值该同名变量的,并且变量类型不受限,这也是C语言中常见的全局变量和局部变量的。

相关:

https://www.codenong.com/38533407/

https://blog.csdn.net/edsam49/article/details/122708337

在python语言中:

这个问题就比较容易,那就是全局变量并不影响局部变量,而局部变量也不影响全局变量,并且二者的类型也不受限制,这就是python语言的duck type的魅力,就是对变量不做任何限制,编码容易好上手,但也运算效率低。

在mojo语言中:

如果一个变量使用let进行绑定声明,那么这个变量就是不能改变的,类似于C语言中的constant,因此使用let定义的变量是不能进行Variable Shadowing的:

例子来源:https://github.com/modularml/mojo/issues/5

上面这个GitHub的网友认为mojo语言中使用let绑定后不允许改变变量是应该分情况的,并给出两个例子,他认为在第一个例子中编码人员是可以大概率的知道使用的变量x是否被定义过的,因此这种情况应该允许使用shadowing的,而第二个例子中编码人员可能不知道y变量是否被定义,因此这种情况才应该不允许改变let绑定的变量。

PS. 感觉这个网友提的问题很有特色,mojo语言中let绑定就是为了保证一些变量具有constant特性的,而且如果真的像他所提的那种分情况处理,那么会增加该编程语言的编程难度,而且好像意义也不大。

不过由于mojo语言还在研发阶段,也就是说语言特性还在改动,据说现在的mojo中,下面的操作是可以的:

let x=1

let x=2

但是,下面的操作是不可以的:

let x=1

x=2

PS. 对于现在的很多孩子experimental阶段的编程语言,我个人的体会就是不要去碰,不要去尝鲜,不然真的很愁人,这语言特性变动的实在要人琢磨不透。

编程语言中的Variable Shadowing(变量遮蔽)—— declaration shadows a local variable —— Consider Allow Shadowing of let Bindings的更多相关文章

  1. 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assignment

    闭包(lexical closure) 什么是闭包前面已经说过了,但是由于遗留问题,所以单独作为一个章节详解讲解下 不多说,看例子: def funx(x): def funy(y): return ...

  2. CMake中的两种变量(Variable types in CMake)

    在CMake中存在两种变量:normal variables and cache varialbes .正常变量就像是脚本内部变量,相当于程序设计中定义的局部变量那样.而CMakeLists.txt相 ...

  3. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其它一些编程语言中的 lambdas 比較类似。

    闭包是功能性自包括模块,能够在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其它一些编程语言中的 lambdas 比較相似.  闭包能够 捕获 和 ...

  4. Bash 脚本编程语言中的美学与哲学

    我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨 Bash 脚本语言中的美学与哲学. 这不是一篇 Bash 脚本编程的教程,但是却能让人更加深入地了解 Bash ...

  5. Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)

    阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 ...

  6. 透过一道面试题来探探JavaScript中执行上下文和变量对象的底

    在做面试题之前,我们先搞清楚两个概念 执行上下文(execution context) 变量对象(variable object) 执行上下文 我们都知道JavaScript的作用域一共分三种 全局作 ...

  7. Linux 桌面玩家指南:06. 优雅地使用命令行及 Bash 脚本编程语言中的美学与哲学

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  8. Machine Learning 学习笔记2 - linear regression with one variable(单变量线性回归)

    一.Model representation(模型表示) 1.1 训练集 由训练样例(training example)组成的集合就是训练集(training set), 如下图所示, 其中(x,y) ...

  9. iOS中四种实例变量的范围类型@private@protected@public@package

    文档上记录是这样的 The Scope of Instance Variables Toenforce the ability of an object to hide its data, the c ...

  10. Ng第二课:单变量线性回归(Linear Regression with One Variable)

    二.单变量线性回归(Linear Regression with One Variable) 2.1  模型表示 2.2  代价函数 2.3  代价函数的直观理解 2.4  梯度下降 2.5  梯度下 ...

随机推荐

  1. kettle从入门到精通 第三十九课 kettle 增量同步(日级)

    1.上一课我们学习了在数据量大的情况下的分页全量同步示例,本次我们一起学习下kettle 增量全量同步.有些业务场景不需要实时数据,比如统计t-1日的销售业绩情况等.   2.kettle增量全量同步 ...

  2. SpringBoot系列(五) 接口校验(非空、非法字符/特殊字符、长度等)

    1.引入pom依赖 <dependency> <groupId>javax.validation</groupId> <artifactId>valid ...

  3. 使用 nsenter 排查容器网络问题

    需求 我想进入容器中执行 curl 命令探测某个地址的连通性,但是容器镜像里默认没有 curl 命令.我这里是一个内网环境不太方便使用 yum 或者 apt 安装,怎么办? 这个需求比较典型,这里教大 ...

  4. Redis的特点什么是?

    a.支持多种数据结构,如 string(字符串). list(双向链表).dict(hash表).set(集合).zset(排序set).hyperloglog(基数估算) b.支持持久化操作,可以进 ...

  5. 前端实现预览PDF

    下载包 npm install react-pdf 我使用的是react-pdf@5.7.2版本 以下例子使用的是react创建的项目 直接上代码=>cv可用,保证高效 1.新增依赖 yarn ...

  6. 使用shell脚本在Linux中管理Java应用程序

    目录 前言 一.目录结构 二.脚本实现 1. 脚本内容 2. 使用说明 2.1 配置脚本 2.2 脚本部署 2.3 操作你的Java应用 总结 前言 在日常开发和运维工作中,管理基于Java的应用程序 ...

  7. OFBiz RCE漏洞复现(CVE-2023-51467)

    漏洞名称 Apache OFBiz 鉴权绕过导致命令执行 漏洞描述 Apache OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构 ...

  8. 美团携手HarmonyOS SDK,开启便捷生活新篇章

    华为开发者大会(HDC 2024)于6月21日在东莞松山湖拉开序幕,通过一系列精彩纷呈的主题演讲.峰会.专题论坛和互动体验,为开发者们带来了一场知识与技术的盛宴.6月23日,<HarmonyOS ...

  9. Nuxt3 的生命周期和钩子函数(二)

    title: Nuxt3 的生命周期和钩子函数(二) date: 2024/6/26 updated: 2024/6/26 author: cmdragon excerpt: 摘要:本文深入介绍了Nu ...

  10. 灰色预测GM(1,1)模型的理论原理

    灰色预测是对时间有关的灰色过程进行预测.通过建立相应的微分方程模型,从而预测事物未来发展趋势的状况. 由于笔者的水平不足,本章只是概括性地介绍GM(1,1)模型的理论原理,便于对初学者的初步理解 目录 ...