| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > perl и массив как член класса |
| Автор: REZiaMIX 18.5.2012, 13:15 | ||||
Если объявляю массив вот так:
тогда print @testArray выдает правильный результат если делаю вот так:
тогда print выдает только последний элемент element3. как сделать правильно? |
| Автор: reiserford 18.5.2012, 13:18 |
| - our @testArray = []; # или our @testArray = undef; + our @testArray; Что вы хотели сказать вот этим? $self{@testArray} = ("element1","element2","element3"); |
| Автор: DurRandir 18.5.2012, 13:20 |
| 1. Где у вас тут print? 2. Что творится в родительском классе? 3. our @testArray = [] - вы в массив записали один элемент - ссылку на пустой анонимный массив. 4. $self{@testArray} - это вообще-то срез хэша. Причём где этот хэш определили - непонятно (п.2), что распечатывали - непонятно (п.1) Когда приводите пример кода - должна быть возможность его запустить и увидеть то же, что и вы. |
| Автор: REZiaMIX 18.5.2012, 13:23 | ||||
этим пытался присвоить @testArray, как члену класса новое значение - массив ("element1","element2","element3"); П.С. я пишу на плюсах , в перле новичек Добавлено через 1 минуту и 54 секунды тогда вопрос другой , объявили мы массив в классе:
как получить к нему доступ из саба , и присвоить новые значения? |
| Автор: DurRandir 18.5.2012, 13:36 |
| our @testArray - это просто переменная уровня пакета - в обычных терминах это "статический член класса". Почитайте perltoot/perlobj для просветления) |
| Автор: REZiaMIX 18.5.2012, 13:44 | ||||
я понимаю, что это переменная уровня пакета(или стат. член класса), так вопрос не в том, вопрос в том , как правильно к ней обратиться из саба и установить новое значение, в моем случае - новый массив. Если к обычным переменным я обращаюсь через
то с массивом так не выходит |
| Автор: REZiaMIX 18.5.2012, 14:20 | ||
Вопрос решен, делаю так:
|
| Автор: vadiml 18.5.2012, 15:39 | ||
А зачем это нужно было? our @testArray и @{$self->{'testArray'}} -- это разные, ни как не связанные массивы. Ладно если б Вы сделали $self->{'testArray'} = \@testArray, то имели бы 2 способа обращения к массиву: @TestPackage::testArray и @{$self->{'testArray'}} Хотя смысла в этом нет если Вы не хотите иметь static данные к своём классе. |