[AHK-SimpleArray对象] AHK中的SimpleA
2018-12-22 本文已影响0人
d61f25068828
之前很早就发现,在AHK中SimpleArray等对象,在作为参数时,依然是传值的,在Java中是对象就都是传地址的。
既然知道是这样,那我就已经用习惯。
今天编程的时候,遇到了一个很奇怪的问题,运行一个搜索程序,第一次正常,第二次出错。
最后定位到了这个语句。
TheURLArray:=v
TheURLArray.RemoveAt(1)
看来看去,突然想到:也许在AHK中,Object的赋值是传地址的,但是作为参数却都是传值的(ByRef除外)。
结果一测试,果然如此。
感觉好另类啊,不知道其他语言有没有这样。
SA1:=["A","B"]
DeBugDeepPrintln(SA1,"SA1 >>> ")
NewSA:=SA1
SA1.RemoveAt(1)
DeBugDeepPrintln(NewSA,"NewSA >>> ")
SA1:=["A","B"]
DeBugDeepPrintln(SA1,"SA1 >>> ")
NEWT(SA1){
local
SA.RemoveAt(1)
return
}
DeBugDeepPrintln(SA1,"SA1 >>> ")
控制台结果↓
SA1 >>> [A,B]
NewSA >>> [B]
SA1 >>> [A,B]
SA1 >>> [A,B]
最后改一下就完美解决了这个BUG。
TheURLArray:=v.Clone()
TheURLArray.RemoveAt(1) ;