当我将哈希引用传递给子例程时,为其分配哈希引用参数的变量有什么好的命名约定?
在下面的示例中,有什么更好的选择:
我倾向于使用选项1,因为相同哈希引用的新名称感觉多余。
如果选项2更好,那么子程序中变量的良好命名约定是什么?
## example:
use strict;
use warnings;
my $href_phone_book = generate_phone_book();
my $phone_number = get_phone_number($href_phone_book, "john");
print $phone_number."\n";
sub generate_phone_book {
my %phone_book = (
john => "5554321",
alice => "5551234"
);
return \%phone_book;
}
sub get_phone_number{
# Is it OK to hide the original variable
my $href_phone_book = shift;
# Or should I use a new variable name? What would then be a good naming convention?
my $person = shift;
my $phone_number = $href_phone_book->{$person};
return $phone_number;
}
答案 0 :(得分:1)
您应该为他们引用的数据命名变量。理想情况下,您应该使用一个简短的非模糊名称,并尽可能删除上下文。例如,如果您的函数执行的操作通常适用于任何哈希引用,则名称$hash_ref
将更适合IMO到$phone_book
<强> 1。使用与原始变量相同的变量名称(并让Perl隐藏块中的原始文件)。
虽然不是一般安全的假设,但 我会在你的例子中做什么。我会使用$phone_book
作为单个参数。
注意,如果重复使用相同的参考数据结构作为函数的参数,那么它指向编写一些OO Perl。您应该创建一个类,数据结构是对象,函数已更改为实例方法。
警告:由于范围可变,您的示例脚本将生成警告。所以我的建议需要修改。我不会改变子例程的变量,而是将全局变量命名为$main_phone_book
。 。 。但由于示例脚本的结构,这只是必需的。理想情况下,您应该避免全局数据结构,并使用模块化(包含处理电话号码的所有逻辑的PhoneBook.pm
文件,无论是导出函数还是新类,由于包名称空间而不会在变量名称上发生冲突)。或者,如果变量对于手头的问题是真正全局的,那么你可能根本不会将它们作为参数传递。
<强> 2。在子程序中为哈希引用提出一个新名称?
在这种情况下,仅需要由于示例脚本的文件结构。至少在单个脚本和模块的层面上,一致性比找到一些可以满足您所有需求的特殊命名约定更重要。
我建议你阅读Perl Best Practices的变量命名约定章节。这是非常明确和有用的建议。