gpt4 book ai didi

arrays - 试图理解困难的 Perl 语法 : array and empty square braces

转载 作者:行者123 更新时间:2023-12-01 16:09:40 25 4
gpt4 key购买 nike

我正在尝试分析一段包含以下内容的 Perl 代码:

unless( @{$avl->Rates() || []} ) {
if(!$nobar) { push @rptmp, 'BAR' unless @rptmp; }
}

内心的 Action 我想我明白了。这意味着“如果 $nobar 为假(在本例中为 0),则将字符串 'BAR' 添加到数组 @rptmp 除非 @rptmp 已经存在。”

我遇到麻烦的部分是第一个“除非”条件:unless (@{$avl->Rates() || []})$avl->Rates() 是一个返回列表(或者指向列表的指针?)的函数。但对我来说真正令人困惑的部分是 || []。这是“或”的东西,所以它不会被选中,除非 $avl->Rates() 什么都不返回。但我不确定它的作用,尤其是空方括号。如果它返回的是空的东西,它不会总是假的吗?另外,是否有更好或至少更清晰的方式来编写此代码?

最佳答案

so it is not selected unless $avl->Rates() returns nothing

它不可能在标量上下文中什么都不返回。据推测,它返回对数组或 undef 的引用。 除非 (@{ $avl->Rates }) 在后一种情况下会失败,因此编码人员决定在这种情况下使用对空数组的引用。

[]

大致相当于

# Create an array, and return a reference to it.
do { my @anon; \@anon }

有点浪费,但是

if (!@{ $avl->Rates() || [] }) {
...
}

常用,因为它比

my $rates = $avl->Rates();
if (!$rates || !@$rates) {
...
}

下面更清楚,避免在不需要时调用 Rates:

if (!$nobar && !@rptmp) {
my $rates = $avl->Rates;
push @rptmp, 'BAR'
if !$rates || !@$rates;
}

关于arrays - 试图理解困难的 Perl 语法 : array and empty square braces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31441747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com