找回密码
 加入
搜索
查看: 2630|回复: 8

[AU3基础] 【BUG反馈】循环内变量重新定义无效?这个算不算AU3的BUG?

  [复制链接]
发表于 2011-12-7 11:10:33 | 显示全部楼层 |阅读模式
本帖最后由 skyfree 于 2011-12-7 11:12 编辑


_Main()
Exit

Func _Main()
        Local $i
        For $i = 1 To 2
                Local $s_Test
                MsgBox(0, $i & "-1", $s_Test)
                $s_Test = "Test"
                MsgBox(0, $i & "-2", $s_Test)
        Next
EndFunc   ;==>_Main


写了段简单的代码用以说明问题,上述代码没有实际功能,简单解释一下:
1、使用For循环循环两次
2、循环中,每次都定义变量“$s_Test”
3、定义完变量后,显示变量的初值,对AU3来说变量不定义初值时值应为空
4、而后将$s_Test赋值为“Test”
5、再次展示$s_Test的值,此时值即为“Test”

但发现了如下问题:
1、循环体被执行了两次,两次中每次都有定义变量$s_Test
2、理论上说,第一次定义的$s_Test与第二次定义的$s_Test应该只是名称相同,但不是同一个变量,具体说,应不是同一个内存数据块
3、理论上说,两次循环中所展示出的$s_Test值应是相同的,应是先为空,后为“Test”
4、但问题出现了:
(1)第一次循环中,$s_Test的值先为空,

后为“Test”

这个没错
(2)但在第二次循环中,$s_Test的值竟然先为“Test”?!

后还是“Test”

第二次循环中,$s_Test的值应与第一次循环时相同,还是先为空,后为“Test”才对吧??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-12-7 11:25:39 | 显示全部楼层
这个应该是Au既定的,不是Bug~
类似这种重定义的情况我肯定会赋初值 Local $s_Test = ''
发表于 2011-12-7 11:29:17 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +50 贡献 +15 收起 理由
35888894 + 50 + 15 正解

查看全部评分

发表于 2011-12-7 12:42:58 | 显示全部楼层
前辈的$s_Test在第二次循环开始没有赋新值,
Local说明应该是在这个函数内部有效,而第二次循环仍然属于此作用域内!...

小弟愚见...
发表于 2011-12-7 13:05:13 | 显示全部楼层
内存是不会自动释放的,local那个内存就是私有的,一旦发生赋值,除非改值,否则不会变的
发表于 2011-12-7 16:41:42 | 显示全部楼层
学习了!
两位元老道出了前因后果!
 楼主| 发表于 2011-12-7 17:27:08 | 显示全部楼层
看来以后变量必须要赋初值了
发表于 2011-12-7 19:52:53 | 显示全部楼层
回复 1# skyfree

这不是bug,在那个语言里基本都差不多,首先要明白啥是变量定义:所谓定义,就是编译器创建一个对象,并为这个变量分配一块内存和取个名字,这个名字就是常说的变量名了。但注意的是,一旦这个名字跟一定的内存块匹配起来了,在一定的作用空间(名空间:如函数内,全局变量等),就只能被定义一次,若多次重复定义,语言编译器有两种处理方式,如标准C的编译器直接报错,而一些所谓优化的C语言编译器会直接忽略后面的重复定义(不报错),au3采取的是后者形式,也就是直接忽略重复定义
总结下就是:对类型和名字完全相同的定义,编译器直接忽略第二次定义,但不忽略第二次初始化(因为初始化其实是两个步骤:先定义,然后赋值,若编译器发现已经定义过了,就直接到第二步赋值了)。

还有一点就是跟你所说的循环还没有关系,因为一个循环不是一个名空间(au3里的for循环中,只有且仅有循环变量$i会自动创建为Local名空间的,所以for循环里的循环变量$i可以不用定义的)

评分

参与人数 1金钱 +30 贡献 +2 收起 理由
afan + 30 + 2

查看全部评分

发表于 2011-12-8 09:41:28 | 显示全部楼层
有很多的语言定义变量的时候必须赋值的,有的语言不赋值的情况下默认是1
高人一出马,必定会引来众多的高手!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-20 07:15 , Processed in 0.121546 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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