如果一个子程序在使用比预期更多的参数调用时是否应该克服,或者是否应该忽略额外的参数?
#!/usr/bin/env perl
use warnings;
use strict;
sub routine {
my ( $a, $b ) = @_;
return $a * $b;
}
my $reslult = routine( 4, 5, 6 );
答案 0 :(得分: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'
次检查。)
答案 1 :(得分:7)
即使在一个项目中,这也有点主观。在某些情况下,多余的参数可能表明调用者存在真正的问题,值得检查,特别是如果子例程是已发布库的一部分。另一方面,如果子例程是用于内部消耗的,则忽略额外的参数可以使其更方便。 (例如,您希望它对数组中的第一个元素进行操作,但不要打扰隔离该值并将其赋予整个数组。)
考虑用例,以及这些额外的参数是否只是垃圾或可能暗示真正的问题,以及性能问题是什么应该有助于您确定它是否值得。另一个考虑因素:子程序中的代码会自然地捕获可能导致出现额外参数的错误。如果是这样,测试参数计数可能是多余的,并且可能不如以后捕获的特定错误有用。