![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Хотелось бы узнать, есть ли готовые решения для сабжа?
Я пробовал Class::Accessor, Class::Gomor, но не смог выжать из них то, что мне нужно. Ниже более подробное описание. Есть объект примерно такой структуры:
Мне нужен модуль, который бы автоматически сгенерировал следующие методы get'a/set'a:
Это сообщение отредактировал(а) KSURi - 4.1.2008, 19:51 -------------------- Died at Life.pl line 21 |
|||
|
||||
sir_nuf_nuf |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
стандартные модули - маловероятно... странный случай просто =) не думаю, что кому то могло такое понадобится.
если все таки надо, то можно делать так: тот самый модуль Class/Plainer.pm
примитивный тест test.pl
P.S. замечу, что а) под вложенными стурктурами понимаются только хеши хешей, т.е. содержимое массивов не просматривается б) как только идентификатор найден - поиск останавливается.. отсюда вывод: по хорошему _все_ имена полей класса должны быть различными - иначе задаче криво сформулирована Это сообщение отредактировал(а) sir_nuf_nuf - 6.1.2008, 07:31 |
||||
|
|||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
sir_nuf_nuf, интересный подход, думаю это подталкнет на создание своего модуля, автора темы.
Тоже считаю, что модуля нет ещё для таких структур, хотя может авторы существующих, могут и подсказать. Лично не использовал, пишу все методы "ручками", и мне так удобнее, да и вполне это просто. Но суть мне интересна. З.Ы.: пожалуйста отредактируйте сообщение, используя подсветку кода, примерно так
так приятнее читать его. |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Я прикидывал как это сделать самому (хотя ваш вариант кажется компактнее), просто думал может придется изобретать велосипед...
В любом случае спасибо, на досуге разберу ваш код -------------------- Died at Life.pl line 21 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый sir_nuf_nuf!
А как тест сработает в случае
![]() Это сообщение отредактировал(а) ginnie - 6.1.2008, 11:39 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
плохо сработает =)
меняем lookup
Спасибо за замечания !! Это сообщение отредактировал(а) sir_nuf_nuf - 7.1.2008, 22:29 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый sir_nuf_nuf, регулярное выражение
используется для ускорения работы? ![]() -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Зачем спорить по мелочам?) Выход тут очевиден я думаю, я вполне могу поправить те моменты, которые кажутся не совсем удачными.
-------------------- Died at Life.pl line 21 |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
В этом может родиться истина ;) Я думаю дискуссию можно не прекращать ![]() А может быть, что-то очень даже перспективное, главное нужное другим людям ;) , может получится. |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Как я и говорил, на досуге взялся за код sir_nuf_nuf. Почитал, разобрал.
Вот проблема уже появилась: после вызова lookup для например ключа B в хэшерефе А (если смотреть абсолютно, то В выглядит как $obj->{A}->{B}, соответственно вызываю я его $obj->set_B('bla')), это ключ почему-то просто пропадает из этого самого хэшрефа (писать даже как-то стыдно такое, но что поделать...). Понимаю, что скорее всего ничего не понятно из данного текста, поэтому лучше посмотреть 3 скриншота (обратите внимание на красные рамки в верхнем-правом углу): 1. Структура hashref'a до вызова сеттера. http://i5.tinypic.com/6wxfakw.png 2. Структура hashref'a во время работы сеттера (если быть точным, то уже после работы оператора присваивания, но до возвращения из самого метода) http://i17.tinypic.com/6y504sj.png 3. Структура hasref'a после возвращения из сеттера http://i1.tinypic.com/870n1j9.png P.S.: sir_nuf_nuf, заметил что изменили немного код саба lookup, использовав прагму attributes и вместо ref использовали reftype. Можно узнать, чем вызвано такое решение? Это сообщение отредактировал(а) KSURi - 7.1.2008, 01:43 -------------------- Died at Life.pl line 21 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый KSURi, а нельзя модулем Data::Dumper вывести содержимое объекта после set__LoginTemplate(), чтобы исключить ошибки отладчика?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
KSURi |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Сказать, что я удивлен, значит не сказать ничего...
Причем:
выдает
Это сообщение отредактировал(а) KSURi - 7.1.2008, 13:20 -------------------- Died at Life.pl line 21 |
||||||
|
|||||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый KSURi, руками бы уже раз 100 все методы доступа написал?
![]() Без твоих исходников, боюсь, никто ничего дельного не посоветует, я точно не смогу - у меня по телепатии двойка была в школе ![]() -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Дык написал уже давно, хотел вот объем кода сократить, а то получилось, что половина кода - однообразные сабы... -------------------- Died at Life.pl line 21 |
|||
|
||||
ginnie |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый sir_nuf_nuf, решил еще раз внимательно посмотреть предложенный Вами вариант
![]() Возникло несколько моментов, требующих Ваших пояснений:
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |