3

在几个在线教程中,我注意到哈希或数组的初始化方式有所不同:

my %new_hash_1 = ();
# or
my %new_hash_2;

my @new_array_1 = ();
# or
my @new_array;

通过我将元素推入数组或将键值对添加到哈希的基本练习,我初始化变量的方式似乎并不重要。

通过进一步的谷歌搜索,我了解到:

%new_hash_1 = ();

有时用于清空现有哈希。

所以我想我的问题是:

  • 应该使用哪种方法来初始化哈希/数组?
  • 每种方法是否有特定的目的?或者这是 TIMTOWDI 的一个例子?

非常感谢。

4

3 回答 3

4

由于哈希和数组的构造方式,在声明它们时为它们分配一个空列表没有区别。它们仍将包含零个元素,并且您尝试从中读取的任何元素都将是未定义的。

将空列表分配给哈希/数组的唯一目的是删除它已经拥有的任何值,并且在初始化时,它们不包含任何值。

需要注意的是,数组和哈希只能包含标量值,并且只有标量值可以包含数据。

于 2013-07-08T13:16:32.453 回答
3

my %hash创建一个新的空哈希。

my @array创建一个新的空数组。

将空列表分配给新创建的哈希或数组是无用的噪音,因为它们已经是空的。

于 2013-07-08T13:14:33.010 回答
-5

两者都有效,但就维护而言,最好将它们分开并用括号 () 初始化列表,用大括号 {} 初始化哈希,到目前为止,我的编码约定是:my %new_hash_1 = {}; 我的 %new_list_1 = ();

这样做的好处是让以后更新您的代码的人更容易做到

my %new_hash_1 = { 'a' => 1, 'b' => 2 };

并且将有助于use strict;use warnings更好地了解您在使用列表作为哈希时尝试做什么。

我还建议您使用 PerlCritic http://search.cpan.org/~thaljef/Perl-Critic-1.118/lib/Perl/Critic.pm来获取更多用户友好的消息。

干杯,杰尔。

ps:请参阅 Oreilly Programming Perl 中的哈希值 ( http://docstore.mik.ua/orelly/perl3/prog/ch09_04.htm )

于 2013-07-08T13:32:43.023 回答