![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Aleshka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 10.12.2007 Где: Харьков Репутация: нет Всего: нет |
Не пойму назначение фигурных в коде а имеено в строке $self= {%attr}, как я понимаю это нужно для создания символической ссылки %attr.
Я прав?
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Нет, это создается анонимный хеш. {%attr} означет, что надо хеш представить в виде списка и из полученного списка создать анонимный хэш.
Если обработка параметров не планируется, то лучше написать
Сам я всегда указываю свойства класса явно, кроме этого использую модуль Hash::Util (функции lock_keys unlock_keys), чтобы выявлять ошибки при неверном написании имени свойства. Это сообщение отредактировал(а) ginnie - 21.2.2008, 18:21 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Aleshka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 10.12.2007 Где: Харьков Репутация: нет Всего: нет |
А можно немного подробней об этом рассказать. Т.е если это не ссылка на хэш, то как мы можем скалярной переменной присваивать целый список??? Или мы в перемеенную $self заносим адрес на анонимный хэш. Так? И зачем тогда такие сложности из хэша делают список чтобы затем опять представить его в анонимный хэш. Я perl-код взял из книги, просто мне это стало непонятно назначение {}. Но хотелось бы узнать для чего мне это может быть полезно обычный хеш преобразовывать в анонимный?? |
|||
|
||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Можно и поподробнее: в переменную $self мы заносим ссылку на анонимный хеш. Делаем мы это для того, чтобы функция new() возвращала объекты, содержащие разные хеши (т.е. хеши, расположенные в памяти по разным адресам).
Если написать
то при втором вызове new() интерпретатор выдаст сообщение об ошибке, т.к. \%self уже сопоставлена классу. P.S. Вариант
аналогичен приведенному выше. Это сообщение отредактировал(а) ginnie - 21.2.2008, 19:57 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
Aleshka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 10.12.2007 Где: Харьков Репутация: нет Всего: нет |
А что значит данное высказывание. Это что элементы хеша распологаются по разным адресам?? Т.е мы подрозумеваем хеш хешей, так? Это сообщение отредактировал(а) Aleshka - 22.2.2008, 10:00 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Высказывание значит, что если выполнить код
$object1 и $object2 будут указывать на разные хэши в памяти. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
Aleshka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 10.12.2007 Где: Харьков Репутация: нет Всего: нет |
Понял, спасибо.
|
|||
|
||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Aleshka, приношу глубочайшие извинения, что ввел в заблуждение!
![]() Фрагмент
отработает нормально, без каких-либо ошибок. Я полагал, что \%self будет при каждом вызове возвращать один и тот-же адрес в памяти (т.е. ссылку на один и тот-же хэш). Это не так. my %self всегда создает новый хеш в памяти. Код
должен работать без проблем. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |