4

当使用比预期更多的参数调用子程序时应该发出嘶哑的声音,还是应该简单地忽略额外的参数?

#!/usr/bin/env perl
use warnings;
use strict;


sub routine {
    my ( $a, $b ) = @_;
    return $a * $b;
}

my $reslult = routine( 4, 5, 6 );
4

2 回答 2

7

一般来说,我不会费心手动编写参数检查,但我认为正确的反应是呱呱叫。这样,您可以在不破坏现有调用者的情况下扩展该函数以稍后采用可选参数。

如果你的 Perl 足够新,你可以Function::Parameters像这样安装和使用:

use warnings;
use strict;
use Function::Parameters qw(:strict);

fun routine($x, y) {
    return $x * $y;
}

my $result = routine(4, 5, 6);  # croaks automatically

(顺便说一句,不要调用您的变量$a$b:这些名称被使用sort 并免于strict 'vars'检查。)

于 2013-02-12T16:10:15.220 回答
7

这有点主观,即使在项目中也是如此。在某些情况下,过多的参数可能表明调用者存在真正的问题并且值得检查,特别是如果子例程是已发布库的一部分。另一方面,如果子程序是供内部使用的,忽略额外的参数可能会更方便。(例如,您希望它对数组中的第一个元素进行操作,但不必费心隔离该值而只需将整个数组都给它。)

考虑用例,以及这些额外的参数是否只是垃圾或可能暗示一个真正的问题,以及性能问题是什么应该可以帮助您决定是否值得。另一个考虑:子例程中的代码是否会自然捕获可能导致出现额外参数的错误。如果是这样,测试参数计数可能是多余的,并且可能不如稍后捕获的特定错误有用。

于 2013-02-12T16:21:14.297 回答