gpt4 book ai didi

perl - 使用 if 条件的更好方法

转载 作者:行者123 更新时间:2023-12-02 06:36:07 26 4
gpt4 key购买 nike

我需要运行一个测试脚本,其中有超过 10 个条件来验证。如果任何步骤失败,程序将失败并且不会执行进一步的步骤。目前,我的程序是这样的:

boolean status = 0;

status = function1(param1, param2);
if (status) {
status = function2(param1, param2);
if(status) {
status = function3(param1, param2);
if(status) {
status = function4(param1, param2);
}
:
:
:
}
}

return status;

我对这么多嵌入式 IF 子句不满意。有更好的方法吗?

最佳答案

翻译成 Perl,你可能会写:

sub testing
{
my $status;

if (($status = function1($param1, %param2)) &&
($status = function2($param1, %param2)) &&
($status = function3($param1, %param2)) &&
($status = function4($param1, %param2)))
{
# ...do whatever...
}

return $status;
}

或者,假设 $status 只是一个 bool 值:

sub testing
{
return 0 if !function1($param1, %param2) ||
!function2($param1, %param2) ||
!function3($param1, %param2) ||
!function4($param1, %param2);

# ...do whatever...

return 1;
}

或者:

sub testing
{
return 0 unless function1($param1, %param2);
return 0 unless function2($param1, %param2);
return 0 unless function3($param1, %param2);
return 0 unless function4($param1, %param2);
# ...do whatever...
return 1;
}

如果您真的有 10 个具有相同调用签名的函数,那么您甚至可以这样做:

sub testing
{
my @funcs = ( &function1, &function2, &function3, &function4, &function5,
&function6, &function7, &function8, &function9, &function10,
);

for my $funcref (@funcs)
{
return 0 unless &$funcref($param1, %param2);
}

# ...do whatever...

return 1;
}

请注意,前三个备选方案将处理不同的函数调用签名,只是代码的布局更加困惑;最后一个几乎需要列表中每个函数的相同函数调用签名。

关于perl - 使用 if 条件的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18556412/

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