找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 10968|回复: 10

求教,关于变量的生效范围问题

[复制链接]
发表于 2017-5-1 10:03:17 | 显示全部楼层 |阅读模式
有几个疑问:
1. 把一部分程序变成“我的模块”后,这个“我的模块”里的变量,是否还在主程序中可见呢?2. 把“我的模块”导出后,在第二个程序中导入。 这时候,这个“我的模块”里的变量是否在第二个程序的主程序中可见呢? 如果主程序中,有和被导入的“我的模块”命名一样的变量,会不会有冲突?

作为程序员,按我的理解,通常在普通的编程语言里,模块里的变量只是在模块里起作用。 但是乐高的文档中有说明,变量都是全局的。这样的话会造成不小的冲突。

另外,乐高的编程环境非常不利用重构,模块定义不能修改,重命名变量也很麻烦。



如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2017-5-2 21:14:39 | 显示全部楼层
冀·闲庭信步 发表于 2017-5-2 08:22
个人认为:你把变量与自定义模块的参数混为一谈了。

在EV3编程环境下变量是全局的。

他的 问题 是  把我的模块 导出    成文件    在其他程序 中 导入文件后   变量的变化情况   所以我的回答 没有错  我的模块文件   导入后  变量是不存在的   需要重新 定义 因为 变量是上一个主程序定义的  和我的模块 没有关系   
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

 楼主| 发表于 2017-5-2 12:14:12 | 显示全部楼层
虽然导入模块之后,这个模块内部的变量不会自动出现在主程序的变量列表里。但是创建了相同名称的变量后,实际上还是指向的同一个对象。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

发表于 2017-5-2 08:22:35 | 显示全部楼层
青岛张纯胜 发表于 2017-5-1 19:20
乐高的 这个 编程软件  是针对 低年龄层设计的   所以 没有 很复杂  的变量系统    也就是说  没有 局部变 ...

个人认为:你把变量与自定义模块的参数混为一谈了。

在EV3编程环境下变量是全局的。

参数(输入和输出)是局部的,其名称可以与变量名重名。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

发表于 2017-5-1 19:20:11 | 显示全部楼层
乐高的 这个 编程软件  是针对 低年龄层设计的   所以 没有 很复杂  的变量系统    也就是说  没有 局部变量   所有 变量 都是 全局 变量  一旦建立命名   所有我的模块和主程序 都可以使用    对高手来说这是缺点   对新手特别是小孩子来说这是优点     
1 我的模块有输出端口   你可以拉数据线出来 在主程序中显示变量值   
2我的模块导出后 变量会消失不见  所以不会和新的程序冲突   要重新 建立变量 命名和调整变量类型
乐高的这套编程系统是教学用的 也可以说是玩具   没有实用性    只有可玩性   所以你不要要求太高    你可以尝试用 C语言来编程   或者 JAVA   EV3都支持   
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2017-5-1 21:17:56 | 显示全部楼层
青岛张纯胜 发表于 2017-5-1 19:20
乐高的 这个 编程软件  是针对 低年龄层设计的   所以 没有 很复杂  的变量系统    也就是说  没有 局部变 ...

谢谢!

低年龄的孩子对于局部和全局变量可能确实不太容易理解。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2017-5-2 12:11:57 | 显示全部楼层
经过验证,就算导入进去的模块里的变量,也是全局的。在导入的模块里对某个名称的变量赋值,也会影响到主程序。

验证方法:
1. 编写程序1,增加对变量test1赋值100的操作,保存成我的模块并导出。
2. 编写程序2,导入步骤1里的模块。创建变量test1,赋值为0,然后执行导入的那个模块。 test1变量的最终值变成了100.
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-5-3 08:41:55 | 显示全部楼层
说得对
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2018-5-16 23:15:26 来自手机 | 显示全部楼层
很好的问题!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2018-5-17 16:09:04 | 显示全部楼层
本帖最后由 jhm 于 2018-5-17 16:46 编辑
ddeef 发表于 2017-5-2 12:11
经过验证,就算导入进去的模块里的变量,也是全局的。在导入的模块里对某个名称的变量赋值,也会影响到主程 ...
不仅如此,在模块创建器中,添加变量也具有这样特性。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2018-5-17 16:16:53 | 显示全部楼层
本帖最后由 jhm 于 2018-5-17 17:17 编辑
青岛张纯胜 发表于 2017-5-2 21:14
他的 问题 是  把我的模块 导出    成文件    在其他程序 中 导入文件后   变量的变化情况   所以我的回 ...

好像模块导出后,环境变化了,模块里定义变量仍然保留的,以原名的方式被模块内置。当新程序调用模块时,这些变量随之而在,并是全局的,可以读、写(创建模块时提供写图标),只不过变量名不自动显示在环境变量列表中。当新环境中重新定义这些变量名时,还是指向原来的同名变量,并将变量名添加到变量列表中。所以,变量都是全局的!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-11-24 11:33 , Processed in 0.122775 second(s), 25 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表