2
我發現了一行Perl代碼,它以我從未見過的方式使用pop
。我一直認爲pop
傳回陣列僅有一個項目,但下面的用法確實是不同的:在同一行中出現多個彈出框
my ($self, $loop, $resources) = @{pop @_};
看來,程序員用一行代碼,和一個pop
命令,要抓住從三個項目參數數組,而不創建明確的for
循環。這是如何工作的?
我發現了一行Perl代碼,它以我從未見過的方式使用pop
。我一直認爲pop
傳回陣列僅有一個項目,但下面的用法確實是不同的:在同一行中出現多個彈出框
my ($self, $loop, $resources) = @{pop @_};
看來,程序員用一行代碼,和一個pop
命令,要抓住從三個項目參數數組,而不創建明確的for
循環。這是如何工作的?
在此示例中@_是一個數組,最後一個元素預計爲arrayref。
因此,pop(@_)
從@_獲取最後一個元素,然後將其解引用到數組中;將前3個元素保存到$ self,$ loop和$ resources中。
這可以寫成這樣:
my $self = $_[-1]->[0];
my $loop = $_[-1]->[1];
my $resources = $_[-1]->[2];
或者這樣:
my $temp = pop @_;
my ($self, $loop, $resources) = @$temp;
因此,實際上它是不是 「在一行中的多個彈出」
啊,這樣做更有意義。 –
如果你確實想「多個彈出窗口「,你可以使用'splice',例如'my($ x,$ z,$ z)= splice(@_,-3);' – ikegami