簡體   English   中英

為什么這些代碼塊的行為不同?

[英]Why do these blocks of code behave differently?

我是Perl的新手,我無法弄清楚。 我有兩個看似相同的代碼集,但是一個子例程更新值,而另一個子例程則不。 在第一組代碼中,我的理解是傳遞對數組的引用,然后更新該引用所指向的值。 然后,在離開子例程時,該值已更改。 但是,在第二篇中,我希望發生同樣的事情。 它確實更新了數組,但是在離開子例程之后卻忘記了它。 有人可以向我解釋第二組代碼在幕后發生的事情嗎?

第一個代碼集:

#!/usr/bin/perl -w

use strict;

{
    my @array = (1, 2, 3);
    removeSecondElement(\@array);
    print @array;  #output: 13
    print("\n");
}

sub removeSecondElement{
    my ($arrayReference) = @_;
    splice(@$arrayReference, 1, 1);
    print @$arrayReference;  #output: 13
    print "\n";
}

第二代碼集:

#!/usr/bin/perl -w

use strict;

{
    my @array = (1, 2, 3);
    removeSecondElement(\@array);
    print @array;  #output: 123
    print("\n");
}

sub removeSecondElement{
    my ($arrayReference) = @_;
    my @array = @$arrayReference;
    splice(@array, 1, 1);
    print @array;  #output: 13
    print "\n";
}

在第一個示例中,使用引用獲取數組,然后對其進行修改。 只有一個數組,您可以更改它。

在第二個示例中,使用引用獲取數組,然后將數組的內容復制到第二個數組中 ,然后修改第二個數組。 有兩個數組,您永遠不會更改原始數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM