簡體   English   中英

為什么reverse()不會改變我的數組?

[英]Why does reverse() not change my array?

當我使用reverse()sort() ,如果我想稍后使用它,我總是需要將return語句保存到變量中。

@array=qw(Nick Susan Chet Dolly Bill);
@array = reverse(@array);

為什么這與使用push()pop()shift() ,您可以在其中調用函數並更改數組?

@array=qw(Nick Susan Chet Dolly Bill);
push(@array, "Bruce");

那么這些“功能”究竟有什么區別呢?

perldoc perlfunc提供了一個主要線索:

真正的@ARRAYs的功能

eachkeyspoppushshiftspliceunshiftvalues

列表數據的功能

grepjoinmapqw//reversesortunpack


perldoc perlfaq4解釋了數組和列表之間的區別(強調我自己):

列表和數組有什么區別?

(由brian d foy提供)

列表是固定的標量集合。 數組是一個包含可變標量集合的變量。 數組可以為列表操作提供其集合,因此列表操作也適用於數組

...

更改標量, 重新排列標量或添加減少某些標量的數組操作 僅適用於數組 這些不能在列表上工作 ,這是固定的。 數組操作包括shiftunshiftpushpopsplice


簡而言之,像reverse這樣的列表操作是為列表設計的,不能修改。

他們可以接受數組的事實僅僅是列表支持的副作用。

只需使用:

@array = reverse(@array)

我可能不會推薦這個,但如果你真的想要你可以解決它...:

use Data::Dumper;
use strict;
use warnings;
use subs 'reverse';

my @array=qw(Nick Susan Chet Dolly Bill);

sub reverse(\@) {
  my $a = shift;
  @{$a} = CORE::reverse(@{$a})
}

reverse(@array);
print Dumper \@array;

#$VAR1 = ['Bill','Dolly','Chet','Susan','Nick'];

暫無
暫無

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

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