Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

создание объектов классов

2.5K
11 июля 2004 года
murat
19 / / 25.02.2004
такая проблема

в цикле вызываю конструктор для объектов своего класса созданные объекты запихиваю в массив
потом оказывается что все элементы массива соответсвуют последнему созденному в цикле объекту

примерно это выглядит так

my @array;
my $i=0;
while ($var ne false) {
$array[$i] = CObject->new(someSub($var));
}

foreach $element(@array) {
$element->someMethod();
}
оказывается что все элементы в массиве одинаковые хотя клал я туда совсем разные вещи

я примерно догадываюсь что new наверное возвращает ссылку на область памяти и по каким-то причинам все время на одну и ту же

при использовании конструкции
@array = (CObject->new(1), CObject->new(2));
получается та же хрень

может дело в конструкторе
вот его исходник:
sub new($) {
my $self = {};
my $class = shift;
$url = shift;
$url =~ s/\/$//gi;
parsingHTML();
return (bless($self, $class));
}
300
12 июля 2004 года
ReDrum
689 / / 20.04.2000
 
Код:
my @array;
my $i=0;
while ($var ne false) {
   $array[$i] = CObject->new(someSub($var));  
+    $i++
}
2.5K
12 июля 2004 года
murat
19 / / 25.02.2004
Цитата:
Originally posted by ReDrum
 
Код:
my @array;
my $i=0;
while ($var ne false) {
   $array[$i] = CObject->new(someSub($var));  
+    $i++
}



ssorry я просто забыл $i++ дописать в примере здесь а у меня она стоит но все равно не работает

дело в том что new возвращает ссылку на объект
и в массив я записываю ссылку

но new все время возвращает одну и ту же ссылку
и все элементы массива ссылаются на один и тот же кусок памяти

как с этим бороться

300
12 июля 2004 года
ReDrum
689 / / 20.04.2000
Нет дело видимо в чем то ином ;)=
1. Вот наши бананы.
Соттветвственно видим, что используются разные участки памяти. Но поля объекта не заданы.

Код:
use strict;

my @array = ();
for (0 .. 5) {
    $array[$_] = Test->new('http://test.org/');
}

use Data::Dumper;
print Dumper(\@array);
print @array;

package Test;

sub new($) {
    my $self = {};
    my $class = shift;
    my $url = shift;
    $url =~ s/\/$//gi;
    parsingHTML();
    return (bless($self, $class));
}

sub parsingHTML {
}


2. murat рекомендую ознакомится с perldoc perldebtut и perldoc perldebug
2.5K
12 июля 2004 года
murat
19 / / 25.02.2004
Цитата:
Originally posted by ReDrum
Нет дело видимо в чем то ином ;)=
1. Вот наши бананы.
Соттветвственно видим, что используются разные участки памяти. Но поля объекта не заданы.

Код:
use strict;

my @array = ();
for (0 .. 5) {
    $array[$_] = Test->new('http://test.org/');
}

use Data::Dumper;
print Dumper(\@array);
print @array;

package Test;

sub new($) {
    my $self = {};
    my $class = shift;
    my $url = shift;
    $url =~ s/\/$//gi;
    parsingHTML();
    return (bless($self, $class));
}

sub parsingHTML {
}


2. murat рекомендую ознакомится с perldoc perldebtut и perldoc perldebug




БООЛЬШОЕ спасибо за совет 2
теперь кажися все работает

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог