加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么“!!”在Perl中被认为是坏的形式?

发布时间:2020-12-15 21:28:51 所属栏目:大数据 来源:网络整理
导读:在最近的工作面试过程中,我提交了一些使用所谓的“秘密”的示例Perl代码! operator.后来,在讨论代码时,一位采访者问我为什么选择使用它,并表示它被认为是不好的形式。他没有详细说明为什么。 我的团队和我一直使用这个运算符多年,没有意识到它被认为是
在最近的工作面试过程中,我提交了一些使用所谓的“秘密”的示例Perl代码! operator.后来,在讨论代码时,一位采访者问我为什么选择使用它,并表示它被认为是不好的形式。他没有详细说明为什么。

我的团队和我一直使用这个运算符多年,没有意识到它被认为是“坏的形式”。

“bang bang”操作符有副作用或其他意外行为吗?为什么,或者可能,被认为是“坏形式”的一些?有没有惯用的替代方法?

下面是几个例子,我会考虑!可接受和/或期望。

>编码练习中的实际代码,这是添加布尔的示例:

while (my $line = <$F>) {
    # snip
    exists $counts{lines} and $counts{lines} += !! chomp $line;
}

>使用布尔值作为哈希键(清楚地简化示例):

sub foo {
    my ($input) = @_;
    my %responses = ( '' => "False",1 => "True" );
    return $responses{ !! $input };
}

>在按位操作中使用布尔值,或者甚至使用pack():

sub foo {
    my ( $a,$b,$c ) = @_;
    my $result = !!$a + (!! $b)<<1 + (!! $c)<<2;
    return $result;
}

>你需要做一个类型转换,以供外部库/进程使用,例如数据库,它只认为某些值是真实的:

my $sth = $dbh->prepare("INSERT INTO table (flag,value) VALUES (?,?)")
$sth->execute("i_haz_cheeseburger",!! $cheeseburger_string)

解决方法

你的 !!利用了Perl中的两个晦涩的东西:具体的值!返回,并且可能的值之一是dualvar(包含字符串和数字的标量)。使用!复合这些行为是诚实的。虽然它的pithiness可以是一个巨大的加分,它也可以是一个相当大的减号。不要使用导致项目强制“在此项目上禁止使用Perl”的功能。

有很多的选择$ count = !! (some_expression)来计算该表达式的真值的出现。一个是三元,$ count =(some_expression)? 1:0。这也有点模糊。有一个很好的紧凑的方式来做你想要的,这是使用post-if:

$x++ if some_expression;

这正是你在做什么。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读