1

次のクラスがあります。

package MyClass;

use strict;
use warnings;

sub new
{
    my $class = shift();
    my $self = {
        _class_array => []
};

    bless ($self, $class);
    return $self;
}

この配列に値を設定/取得するにはどうすればよいですか?

次のコードを試しました:

sub AddDataType
{
    my $self = shift();
    my $new_element = shift();
    my @array = $self->{_class_array};

    print("Number of elements ".($self->{_class_array})."\n");
    push(@array, $new_element);
    $self->{_class_array} = @array;
    
    print("Element added. Number of elements ".($self->{_class_array})."\n");
}

出力は次のとおりです。

要素数 ARRAY(0x21bb4c)

要素が追加されました。種類数 2

エレメント数 2

要素が追加されました。種類数 2

エレメント数 2

要素が追加されました。種類数 2

質問は次のとおりです。

  1. それはどういう意味ですか: Number of elements ARRAY(0x21bb4c)?
  2. 配列の長さが常に維持されるのはなぜ2ですか?
4

3 に答える 3

1

あなたはすでに良い答えを得ています。ムースの特性は、この種の属性を本当にシンプルで楽しいものにすることができるということを言いたいだけです。

BEGIN {
    package MyClass;
    use Moose;
    has "data" =>
        traits  => ["Array"],
        is      => "ro",
        isa     => "ArrayRef[Str]",
        default => sub { [] },
        handles => {
            AddDataType => "push",
            DataCount   => "count",
            NoData      => "is_empty",
            AllData     => "elements",
        };
}

my $thingy = MyClass->new();
print "DOES HAS DATAS? ", $thingy->NoData ? "NOE" : "YES", $/;
$thingy->AddDataType("OHAI");
print "CAN HAS DATA? ", $thingy->NoData ? "NOE" : "YES", $/;
$thingy->AddDataType(qw/ ANUDDER CUPLA HERE / );
print "I HAZ DATAS: ", $thingy->DataCount, $/;
print "HERE DEY IS: ", join(", ", $thingy->AllData), $/;

__DATA__
DOES HAS DATAS? NOE
CAN HAS DATA? YES
I HAZ DATAS: 4
HERE DEY IS: OHAI, ANUDDER, CUPLA, HERE
于 2013-05-08T17:24:08.383 に答える