「河许人」AutohotkeyAHK程序设计

[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) ;
上一篇下一篇

猜你喜欢

热点阅读