Использование многомерного массива в классе Perl - PullRequest
0 голосов
/ 01 октября 2010

Мне нужно создать многомерный массив, который будет передан классу.

Вот пример кода, где я могу ссылаться на элементы массива вне класса, но как только я создаю класс и передаюмногомерный массив, я не могу ссылаться на него внутри класса.

Вывод:

My Array Value = 3

Нельзя использовать строку ("1") в качестве ссылки на ARRAY, в то время как "строгие ссылки" используются в строке test.pl 18.

package TestClass;
use strict;

sub new
{
    my $class = shift;
    my $self =
    {
        _array => shift
    };
    bless $self, $class;   
    return $self;
}

sub print
{
    my ($self) = @_;
    print "TestClass variable = " . @{$self->{_array}->[0]}[1] . "\n";
}

my @my_array = ();
push(@my_array, [1,2]);
push(@my_array, [3,4]);

print "My Array Value = " . @{@my_array->[1]}[0] . "\n";

my $class = new TestClass(@my_array);

$class->print;

1;

1 Ответ

4 голосов
/ 01 октября 2010

Вы передаете список с двумя элементами в ваш конструктор, каждый из которых является одним из созданных вами ссылок на массив.

Я полагаю, вы хотели вместо этого передать ссылку на массив, содержащий две другие анонимные ссылки на массив:

TestClass->new(\@my_array);

Ваш разыменование массива в @{@my_array->[1]}[0] также немного странно.Это то, что use warnings; поймал бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...