Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобрать конструкцию 
:(
    Опции темы
eXeC001er
  Дата 16.11.2009, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



я только начинаю познавать и вот не могу понять почему не хочет работать.
Использую Komodo для понимания происходящих процессов и вот в чем трабл: (код выдернул из рабочего проекта)
имеем модуль
Код

package ModuleFirst;

sub new {
    my ($class, $name, $conf, $m_states) = @_;
    my $tmp = $class->SUPER::new($name, 'mut', $conf, $m_states);
    return $tmp;
}

1;


и имеем код который использует этот модуль

Код

use module;

my $mut_obj = new ModuleFirst('name', 'conf', 'm_states');


в итоге получаю ошибку:

Код

>>>> my $tmp = $class->SUPER::new($name, 'mut', $conf, $m_states);

Can't locate object method "new" via package "ModuleFirst"


Что у меня не так?
PM MAIL   Вверх
mvsgt
Дата 16.11.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



use ModuleFirst надо добавить; кроме того не очень понятно, откуда ModuleFirst возьмёт SUPER - может там в примере ещё что-то было типа use base ...

Это сообщение отредактировал(а) mvsgt - 16.11.2009, 14:57
PM MAIL   Вверх
eXeC001er
Дата 16.11.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



точно, присутствует use base (имя_модуля).
поясните пожалуйста что делает эта конструкция?

А SUPER как я понял из документации это явный вызов метода базового класса. Что тут не так?
PM MAIL   Вверх
Bulat
Дата 16.11.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(eXeC001er @  16.11.2009,  15:10 Найти цитируемый пост)
точно, присутствует use base (имя_модуля).
поясните пожалуйста что делает эта конструкция?


ммм. ну можно сказать, что эта конструкция выполняет функцию наследования, ибо перл позволяет писать в ОО стиле smile


Цитата(eXeC001er @  16.11.2009,  15:10 Найти цитируемый пост)
А SUPER как я понял из документации это явный вызов метода базового класса. Что тут не так? 

ммм.. так сказать суперкласс, если оный термин ОО стиля программирования о чем-то говорит. smile

Все же для изучения перла, стоило бы начать с процедурного. ИМХО 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
eXeC001er
Дата 17.11.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



спасибо. я врубился что и как.

теперь подскажите ответ на вот такой вопрос:

в проекте который я разбираю, наследование идет в 4 файлах, получается что если я вызываю SUPER то будет исполняться самый главный класс ?

ну вот примерно так:
Код

package module3
use base(module2)
new {
    my $tmp = $class->SUPER::new(....);
}


Код

package module2
use base(module1)
new {
    my $tmp = $class->SUPER::new(.....);
}


Код

package module1

new {
    .....
}


вызовется new из модуля 1 ?
PM MAIL   Вверх
Bulat
Дата 17.11.2009, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(eXeC001er @  17.11.2009,  12:22 Найти цитируемый пост)
в проекте который я разбираю, наследование идет в 4 файлах, получается что если я вызываю SUPER то будет исполняться самый главный класс ?


Да.. в теории ОО стиля... Лично я не большой любитель писать ОО на перле, для таких целей предпочитаю сразу использовать язык ОО программирования... smile Насколько я знаю, точно самое же происходит в перле. smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Ramirez
Дата 19.11.2009, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



Код

$class->SUPER::new(.....);


попытается вызвать метод new из родительского пакета (класса) который указан в 
Код

use base(....)


может быть перечислено несколько пакетов (а-ля множественное наследование, если это можно так назвать) тогда искать будет во всех по очереди. вызовет кажется первый найденный.


PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.