Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > роль фигурной скобки |
Автор: Aleshka 21.2.2008, 18:03 | ||
Не пойму назначение фигурных в коде а имеено в строке $self= {%attr}, как я понимаю это нужно для создания символической ссылки %attr. Я прав?
|
Автор: ginnie 21.2.2008, 18:11 | ||
Нет, это создается анонимный хеш. {%attr} означет, что надо хеш представить в виде списка и из полученного списка создать анонимный хэш. Если обработка параметров не планируется, то лучше написать
Сам я всегда указываю свойства класса явно, кроме этого использую модуль Hash::Util (функции lock_keys unlock_keys), чтобы выявлять ошибки при неверном написании имени свойства. |
Автор: Aleshka 21.2.2008, 19:45 | ||
А можно немного подробней об этом рассказать. Т.е если это не ссылка на хэш, то как мы можем скалярной переменной присваивать целый список??? Или мы в перемеенную $self заносим адрес на анонимный хэш. Так? И зачем тогда такие сложности из хэша делают список чтобы затем опять представить его в анонимный хэш. Я perl-код взял из книги, просто мне это стало непонятно назначение {}. Но хотелось бы узнать для чего мне это может быть полезно обычный хеш преобразовывать в анонимный?? |
Автор: ginnie 21.2.2008, 19:55 | ||||
Можно и поподробнее: в переменную $self мы заносим ссылку на анонимный хеш. Делаем мы это для того, чтобы функция new() возвращала объекты, содержащие разные хеши (т.е. хеши, расположенные в памяти по разным адресам). Если написать
то при втором вызове new() интерпретатор выдаст сообщение об ошибке, т.к. \%self уже сопоставлена классу. P.S. Вариант
аналогичен приведенному выше. |
Автор: Aleshka 22.2.2008, 09:56 | ||
А что значит данное высказывание. Это что элементы хеша распологаются по разным адресам?? Т.е мы подрозумеваем хеш хешей, так? |
Автор: ginnie 22.2.2008, 10:06 | ||
Высказывание значит, что если выполнить код
$object1 и $object2 будут указывать на разные хэши в памяти. |
Автор: Aleshka 22.2.2008, 12:06 |
Понял, спасибо. |
Автор: ginnie 24.2.2008, 23:35 | ||||
Aleshka, приношу глубочайшие извинения, что ввел в заблуждение! ![]() Фрагмент
отработает нормально, без каких-либо ошибок. Я полагал, что \%self будет при каждом вызове возвращать один и тот-же адрес в памяти (т.е. ссылку на один и тот-же хэш). Это не так. my %self всегда создает новый хеш в памяти. Код
должен работать без проблем. |