首页 > 编程语言 >编程语言中的Variable Shadowing(变量遮蔽)—— declaration shadows a local variable —— Consider Allow Shadowing of

编程语言中的Variable Shadowing(变量遮蔽)—— declaration shadows a local variable —— Consider Allow Shadowing of

时间:2024-01-24 23:01:34浏览次数:40  
标签:shadows Shadowing 定义 let Consider Variable mojo 变量

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

image

上面这个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阶段的编程语言,我个人的体会就是不要去碰,不要去尝鲜,不然真的很愁人,这语言特性变动的实在要人琢磨不透。




标签:shadows,Shadowing,定义,let,Consider,Variable,mojo,变量
From: https://www.cnblogs.com/devilmaycry812839668/p/17986057

相关文章

  • 报错:Client does not support authentication protocol requested by server; consider
    IDEA启动项目登录时显示用户或密码错误或者连接mysql数据库时报错原因:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,所以可以需要改变mysql的加密规则打开cmd窗口,登录mysql;mysql-uroot-h127.0.0.1-P3306-p......
  • nodejs "Client does not support authentication protocol requested by server; con
    登录mysql输入以下命令:--选择mysql数据库:usemysql--laremehpe是登录用户名ALTERUSER'laremehpe'@'localhost'IDENTIFIEDBY'password'PASSWORDEXPIRENEVER;--laremehpe->用户名,123456->密码ALTERUSER'laremehpe'@'localhos......
  • Consider using `allow_partial_search_results` setting to by
    Elasticsearchdatanode重啟導致sharding找不到家 今天遇到單位同仁重啟 Elasticsearch datanode後發現Cluster狀態變成Red的狀況,這篇記錄遇到這個問題時該怎麼處理 會遇到這個問題通常是「遺失的Datanode」大於「index.number_of_replicas」,Elasticsearchr......
  • Item 1: Consider static factory methods instead of constructors
    实际应用:packagejava.lang;publicfinalclassBooleanimplementsjava.io.Serializable,Comparable<Boolean>{publicstaticfinalBooleanTRUE=newBoolean(true);publicstaticfinalBooleanFALSE=newBoolean(false);....privatef......
  • go-shadowsw问题小记
    Golangshadows是指在Go语言中,一个变量在内部作用域中被另一个同名同类型的变量声明而隐藏的情况。这种情况可能导致一些意想不到的结果,比如返回错误的值或者引用错误的变量。1funcBadRead(f*os.File,buf[]byte)errerror{2for{3n,err:=f.Read(bu......
  • Added non-passive event listener to a scroll-blocking 'mousewheel' event. Consid
    这个警告意味着在事件监听器中,添加了一个阻止页面滚动的`mousewheel`事件,但是该事件监听器并没有标记为被动事件监听器(passiveeventlistener)。这可能会导致页面滚动变得不流畅,特别是在移动设备上。为了解决这个问题,您需要将事件监听器标记为被动事件监听器。具体实现方法如下......
  • 02 Real-Time Shadows
    1.ShadowMapping在shadowmap中,场景被离散化了。在camera中的像素对应的点跟shadow中对应深度可能会有较小偏差,则为阴影。当入射越是平行表面,shadowmap中的像素范围越大,越严重。为此,设置一个shadowmap深度的冗余的阈值偏置。此外,这个bias可以根据角度调整。但是bias过大会......
  • Consider defining a bean of type 'org.springframework.security.authentication.Au
    Considerdefiningabeanoftype'org.springframework.security.authentication.AuthenticationManager'inyourconfiguration.[2023-04-2514:44:36.426][main][ERROR]o.s.b.diagnostics.LoggingFailureAnalysisReporter-***************************......
  • Consider defining a bean of type ‘com.dao.UserInfoDao‘ in your configuration.
    前言搭建项目报错为这个,阅读可知找不到这个通用mapper接口***************************APPLICATIONFAILEDTOSTART***************************Description:FielduserInf......
  • Consider injecting the bean as one of its interfaces or forcing the use of CGLib
    背景今天在写一个数据处理程序的时候,我打算优化一下我的程序,本来是直接用Mapper层进行单行记录保存的,也就是调用的Mapper的insert函数过程然后我就写了一......