如果你的子程序有很多的可选参数,那么请考虑一下将这些参数用散列形式作为关键字-值(key-value)对来传递吧。
例如,假设你有一个子程序,它被用来接收URL和一些可选的参数,例如调试标记、超时、最大深度,以及冗长程度等。如果使用传统的过程编程语言的话,你会看到下面这样的命令:
func(url, debug, timeout, depth, verbose);
在这个模型里,为了传递一个用于深度参数的值,你必须传递一个用于调试和超时参数的值。如果使用Perl的话,你可以把所有的参数组合成一个散列,并且只需要传递那些你感兴趣的(参数)。
下面是Perl里的同一个函数,它把可选参数用散列的形式来传递:
func("http://www.builder.com", debug=>1,
verbose=>0, depth=>2);
sub func
{
my ($url, %params) = @_;
print "URL: $url
";
for $item (sort keys %params)
{
print "$item: $params
";
}
}
使用散列参数传递这种方法,让你能够添加新的参数而不需要更改原有的代码。在你不需要或者不想知道参数是什么的时候,这种方法也会很有用。例如,如果你的“pass-through”函数是用于另一个函数或者对象的包装器,你的代码可以允许调用者传递参数,这些参数被发送到包装函数,而调用者并不不知道它们是什么。
使用散列把参数传递给子程序要容易得多。
James Brown具有20年的行业开发专长和经验,拥有多重工作背景,包括数字硬件设计,网络操作系统开发和分布式计算等。