专栏
标签
循环内外有同名变量时,global应该加在哪些地方
技术分享
发布于 2024-09-11 20:37:25
查看 9过去629天

一、问题现象

循环内外有同名变量时,运行代码报错,报错截图如下图所示:
image.png

二、解决方法 / 步骤

这是由julia 语言特性决定,循环里的作用域不一样,因此需要加在for循环里面,例如:
image.png
具体解释原因如下:

避免危险用户行为。matlab支持模块顶层的循环修改全局变量,这样一来,经常出现像这样的内置变量被修改,导致其他程序跑不通。这是现实中非常常见的危险例子,delsig 库中有,教学活动中也会出现问题(例如:https://tobydriscoll.net/blog/teaching-with-julia-vs-teaching-with-matlab/)

2.强制用户遵循性能优化的假设。julia为了扣性能,从语言层面默认禁止全局变量的写操作,故意禁止用户频繁修改全局变量。这样一来,julia就可以假设一个变量不频繁变化,能根据全局变量的取值做特定优化,如果频繁修改全局变量,取值一变,julia可能就需要在运行途中重新编译代码,开销很大。

3.保持语言设计一致性,julia 想要符合 rust 之类近些年出现的新编程语言的时代特点。这类语言有一个发展趋势,就是 for 循环和 for 循环外部是分离的作用域(这个设计成为主流不是空穴来风,一个有权威的相关资料在https://wiki.c2.com/?GlobalVariablesConsideredHarmful),for 循环内部写a = b行为和在函数里写a = b 一样。编程语言一般不允许在内部作用域用 a = b 修改全局变量,比如 python,需要在内部作用域标明 global 关键字。

所属专栏:Julia语言
产品信息:Syslab科学计算环境
科学计算

全部回答

暂无数据
暂无数据
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天