如何避免空elsif?

时间:2014-10-31 16:37:32

标签: perl

以下代码正是我想要的,但有些东西告诉我,空elsif不是好习惯。目的是确保$typesnapfs,但只有$t才会更改snap

my $t = "";
if ($type eq "snap") {
    $t = "-t snapshot";
} elsif ($type eq "fs") {
} else {
    fatalError("must either be snap or fs")
}

问题

我如何做同样的事情,但没有空elsif

5 个答案:

答案 0 :(得分:5)

怎么样:

my $t = "";
if ($type eq "snap") {
    $t = "-t snapshot";
} elsif ($type ne "fs") {
    fatalError("must either be snap or fs")
}

答案 1 :(得分:4)

我会:

my $t;
if ($type eq 'snap') {
    $t = '-t snapshot';
}
elsif ($type eq 'fs') {
    $t = '';
}
else {
    fatalError("must either be snap or fs");
}

答案 2 :(得分:3)

您实际上将两个单独的检查合并为一个:

  1. $type有效吗?
  2. $t应该设置什么?
  3. 我认为以下内容会更清楚,但会以两次检查相同的值为代价:

    fatalError('must be either snap or fs') unless $type eq 'snap' or $type eq 'fs';
    
    my $t;
    $t = '-t snapshot' if $type eq 'snap';
    

    (当然这假设您的函数fatalError实际上导致程序死亡。)

    您可以将第一部分概括为两个以上的有效选项,如下所示:

    my %valid = map { $_ => 1 } qw(snap fs foo bar);
    fatalError('must be one of: ' . join(', ', keys %valid)) unless exists $valid{$type};
    

答案 3 :(得分:1)

扭转你的状况,摆脱其他人。

} elsif ($type ne "fs") {
    fatalError("must either be snap or fs")
}

答案 4 :(得分:1)

my $t =
  ($type eq "snap") ? "-t snapshot"
: ($type eq "fs")   ? ""
: fatalError("must either be snap or fs");