![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Danissimo |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Пусть объявлен пакет, в котором difinize не является методом класса, а просто подпрограммой:
Пусть объявлен подкласс:
Вот к чему это приводит:
Хочется вызывать definize, не указывая пакет: DAO::definize. Более того, definize не является методом класса. Это просто вспомогательная подпрограмма. Как мне достичь желаемого? Да, и поругайте заодно метод definize. (Может эту ветку лучше было создать в "CGI программировании"...) Это сообщение отредактировал(а) Danissimo - 13.12.2006, 16:09 |
||||||
|
|||||||
| f00Gass |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 10.11.2005 Репутация: нет Всего: нет |
...
use base 'DAO'; ... замени на ... use DAO; push @ISA, qw (DAO); ... Дело в том что "use base 'DAO';" почти эквиваленто BEGIN { require DAO; push @ISA, qw(DAO); } Это сообщение отредактировал(а) f00Gass - 13.12.2006, 16:26 |
|||
|
||||
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Вот как я написал:
То же самое. |
|||
|
||||
| f00Gass |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 10.11.2005 Репутация: нет Всего: нет |
А эту функцию экспортировал из DАО?
И, вообще, судя по тексту ошибки, ты пытаешься вызвать свою лабуду как метод! Can't call method "definize" on an undefined value at MACHINE_DAO.pm line 33. Это сообщение отредактировал(а) f00Gass - 13.12.2006, 16:58 |
|||
|
||||
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Да, экспортирую.
Круто! А я вот даже и не ведаю. Я вот дурею от того, что, как показывает практика (ну, например, вот вы, гуру, по тексту программы не можете понять, вызов метода или нет -- только по тексту ошибки), в перле на каждой строчке ожидает подвох. И не один =) Все-таки языки с четкой грамматикой и этапом компиляции рулят =)) |
|||
|
||||
| f00Gass |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 10.11.2005 Репутация: нет Всего: нет |
Ты ту строку кода показваешь?
То что тама вызвывается подпрограмма, а не метод, и так видно... Добавь, наконец, Exporter в @ISA в твоём DAO! З.Ы.:Короче, почитай внимательнее доки, и тогда подводных камней не будет, Даниссимо Это сообщение отредактировал(а) f00Gass - 13.12.2006, 18:07 |
|||
|
||||
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Все понятно. Я вот читаю втою фразу: "И, вообще, судя по тексту ошибки, ты пытаешься вызвать свою лабуду как метод!" Смотрим следующий пост: "То что тама вызвывается подпрограмма, а не метод, и так видно..." Какие аасоциации возникают? Тока, чур, не думать.
У меня большая просьба. Я не мальчик, который лабу пишет или 3 месяца программированием дегьги зарабатывает. Думаю, не ошибусь, если скажу, что многим бы не помешало поучиться тому, чему я научился. Так вот просьба следующая: если не можете ответить на вопрос, просто не отвечайте на него. Пожалуйств. Выглядит дешево. Я ведь простых вещей в последнее время не спрашиваю. |
|||
|
||||
| f00Gass |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 10.11.2005 Репутация: нет Всего: нет |
Не вижу ничего сложного в твоём вопросе... Ты просто пытаешься вызвать подпрограмму из пакета, при этом не зная как строится пакет и как экспорировать имена... Это ОСНОВЫ! Я указал на твои ошибки. Читай внимательней..
Это сообщение отредактировал(а) f00Gass - 13.12.2006, 20:43 |
|||
|
||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Я как-то встречал при регистрации на каком-то форуме был пункт:
"Обязуюсь читать маны, доки и Факи перед тем как задать вопрос!" тут похож иногда тоже надо. Danissimo, я думаю ты привык к разжёванным ответам korob'а з.ы.: Danissimo, чтобы ещё меньше задавать вопросы, купи КукБук, согласен ей уже переиздание необходимо, но! помогает. В месте с ней perldoc. Ну и книжку от Ларри ;) Тут на форуме были ссылки на электрон. версии разных книг. А то если переписывать множество perldoc в пережёванном виде... форума не хватит Это сообщение отредактировал(а) nitr - 13.12.2006, 20:53 |
|||
|
||||
| korob2001 |
|
||||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
1. От Exporter нужно унаследовать, а не просто подключить его.
2. Экспортируемые подпрограммы пишутся в массив без знака амперсанда. Вобщем попробуй выполнить такой код: Модуль Parent.pm
Класс Child.pm
Программа для теста test.pl
Здесь показаны разные вызовы попдпрограммы которая экспортируется в пространство имён пакета Child. Отсюда вывод:
Она экспортируется, но она доступна, так как нам доступно имя пакета, куда эта подпрограмма была экспортирована. Насколько я понял, ты пытаешься найти в Perl аналог private из Java. Класс: PrivateTest.pm
Вот код, который подсчитывает сумму всех чисел из массива массивов. Программа test.pl
Попробуй как-нить вызвать закрытый метод. Мало того, можно даже закрыть его (метод) от самого себя. ;))))))) Скажем так: Класс PrivateTest.pm
Т.е. к закрытому методу имеют доступ только методы, который находятся с ним в одной лексической области. Для теста можешь попробовать вынести метод sumArrayOfArray() за пределы лексической области и зупусти пример снова. Вопрос лишь в том, нужно ли это? Это сообщение отредактировал(а) korob2001 - 14.12.2006, 05:17 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||||||
|
|||||||||||||||
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Смотрите, как я это вижу. Да, было бы не плохо прочиать несколько книжек, пописать пару лет на перле и т. д. Не могу я себе позволить такую роскошь. А вы это уже сделали, как я ожидаю. Вы прочли, вы пописали. Вы знаете best practices, подводные камни, лучшие решения. Вобщем все то, что приходит с опытом. Я этого ничего не знаю. Именно этот опыт я и преобретаю. Да, я привык рассматривать несколько вариантов решения, выбирать лучший (и не редко единственный). Более того, я никого не обязываю мне отвечать. Нету желания "разжевывать" -- не надо. Никто не требует. Однако я требую, если уж отвечаешь, то отвечай по делу, а не лишь бы сболтнуть чего-нибудь. И мне не понятна позиция: не нравятся твои вопросы, они слишком простые (сложные), это написано в мане. А какое, прстите, вам, государе, дело до того, какие вопросы я задаю? Не нравится -- не читай, не отвечай. Но не надо мне говорить, какие вопросы задавать, а какие нет. Никого ж не оскорбляю, ярлыков не вешаю. А для чего, позвольте спросить, форум существует? Я понятно объясняю? |
|||
|
||||
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Нет, не аналог private. А аналог вот чего:
Добавлено @ 17:11 Ага, значит в пакете Parent ты явно говоришь @EXPORT=(getHello), добиваясь тем самым того, что метод getHello() попадает в пространство имен Child. Сам метод getHello() может работать и как метод класса, и как отдельно стоящая подпрограмма. В методе Child::myMethod() ты вызываешь getHello():
Правильно я думаю, что мой вариант не работал потому, что я не указывал скобки и потому, что я не наследовался от Exporter, а всего лишь use его? |
|||
|
||||
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Тема, вроде бы, себя исчерпала. Рядом (http://forum.vingrad.ru/topic-127038.html) обсуждается примерно то же самое.
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |