代码之家  ›  专栏  ›  技术社区  ›  Laimoncijus

如何在Perl构造函数中定义空数组?

  •  4
  • Laimoncijus  · 技术社区  · 14 年前

    我只是Perl的初学者,所以如果它听起来很愚蠢-对不起:)

    我的问题是-我试图写一个类,它有一个空数组,在类的构造函数中定义。所以我这样做:

    package MyClass;
    
    use strict;
    
    sub new {
        my ($C) = @_;
        my $self = {
            items => ()
        };
        bless $self, ref $C || $C;
    }
    
    sub get {
        return $_[0]->{items};
    }
    
    1;
    

    稍后,我将使用简单的脚本测试我的类:

    use strict;
    use Data::Dumper;
    use MyClass;
    
    my $o = MyClass->new();
    my @items = $o->get();
    
    print "length = ", scalar(@items), "\n", Dumper(@items);
    

    在运行脚本时,我得到以下信息:

    $ perl my_test.pl 
    length = 1
    $VAR1 = undef;
    

    为什么我做错了什么导致我 items 数组填充 undef ?

    也许有人可以给我举个例子说明如何定义类,这样我就不会在数组中得到任何默认值了?

    1 回复  |  直到 14 年前
        1
  •  10
  •   Eric Strom    14 年前

    匿名数组引用构造函数是 [] () 用于将语句分组到列表中。这个 () 在这种情况下,扁平到一个空列表,Perl看到 my $self = { item => }; . 如果你和 use warnings; 你会得到一个关于这个的信息。

    还有,在你的 get 子例程您可能希望取消对字段的引用以返回列表,而不是对数组的引用:

    sub get {
        return @{ $_[0]->{items} };
    }