美文网首页「河许人」AutohotkeyAHK程序设计
[AHK-SimpleArray对象] AHK中的SimpleA

[AHK-SimpleArray对象] AHK中的SimpleA

作者: d61f25068828 | 来源:发表于2018-12-22 12:36 被阅读0次

    之前很早就发现,在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) ;
    

    相关文章

      网友评论

        本文标题:[AHK-SimpleArray对象] AHK中的SimpleA

        本文链接:https://www.haomeiwen.com/subject/iwjikqtx.html