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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать класс в перл, Создание класса  
V
    Опции темы
burakov
Дата 6.12.2007, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день.
Есть КОД

Код


package sample;
use strict;

sub new {
my $class = {};
bless ($class);
return $class;}

sub printa {
my $a = shift;
print "$a\n"; return $a;}

my $object1 = sample::printa(300);
my $object2= sample->printa(300);



object1 выдает результат 300
object2 выдает результат sample (имя пакета)

Где ошибка во второй строке?
Как мне при помощи sample->printa(300) получить результат 300?

пробовал и создавать новый объект 
Код

$object = sample-> new();
$object = sample-> printa(300);



Все равно выдает sample. Вроде все со справочника переписываю, а не работает
В чем ошибка?

Спасибо.


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
KSURi
Дата 6.12.2007, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

...
sub printa { print $_[1] }

package main;

my $obj = new sample;
$obj -> printa(300); # $obj - инвокант


При вызове метода через оператор "стрелка", первым параметром всегда идет переменная-инвокант ($self$this, etc). По сути, вызов obj -> method(param) эквивалентен вызову package::method(obj, param).
Это объясняет использование $_[1] в printa.

Это сообщение отредактировал(а) KSURi - 6.12.2007, 23:51


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
nitr
Дата 11.12.2007, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



burakov, вам необходимо пройти "первые" уроки по ООП в перл, ваша ошибка(хотя оно больше заблуждение) будет описана и разжёвана "в первых параграфах".

А так: в методе сначала передается "наш экземпляр/объект" (метод так и называется "метод экземпляра"), а потом уже параметры, с которыми мы можем работать, т.е. для "верного" ООП, надо так (меняю ваш код):
Код

package sample;
use strict;

sub new {
    my $class = {};
    bless ($class);
    return $class;
}

sub printa {
    my $self = shift;
    my $a = shift; #следующий элемент, а не первый
    print "$a\n";
    return $a;
}

my $object1 = sample::printa(300);
my $object2= sample->printa(300);


но всё же стоит прочесть некоторые книги и попрактиковаться.


--------------------
PM   Вверх
KSURi
Дата 11.12.2007, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



nitr, дык я вроде тоже самое написал...


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
nitr
Дата 11.12.2007, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



мысль одна, смысл тоже, слова другие и поправка тоже ;)

з.ы.: я говорил что ты не прав?


--------------------
PM   Вверх
burakov
Дата 12.12.2007, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем большое спасибо.
Создать класс у меня получилось...




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


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

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


 




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


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

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