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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> возврат значения 
:(
    Опции темы
gcc
Дата 13.5.2009, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



есть модуль не маленький
желательно нужно сделать такие дейтсвия, сразу два метода обработать:

Код

$f->exist->cut_xss('keys' => 'keys');


если я правильно понял, то exist возвращает объект

можно ли узнать что возвращать просто значеие или что нужно возвратить объект?

Код

    return $self->{value} if (defined wantarray);
   return $self;


у меня exist передает данные в SQL::Abstract или другой метод выводит массив с ошибками если какие-то данные не правильные....

как инициализировать 2 метода если один может возвратить не объект а значение...?

Код

sub exist {
 my $self = shift;

  $self->{key} = shift; 
  # $self->{value} = shift;

    $self->_del_blanks_end_began();
    
        $self->_add_all_fields();
        
        print $self->{value};

    if (! $self->{value}) {
        $self->_add_bad_fields();        
     $self->{value} = undef;
    }

   #return $self->{value} if (defined wantarray);
   return $self;
 
}

sub cut_xss {

 my $self = shift;

  $self->{key} = shift; 
  $self->{value} = shift; 
    
    $self->_del_blanks_end_began;
    $self->_clean_html;
    
    print $self->{value};
    # $self->_add_all_fields();
   
    return $self->{value} if (defined wantarray);
    # return $self;
}


Это сообщение отредактировал(а) gcc - 13.5.2009, 02:10
PM WWW ICQ Skype GTalk Jabber   Вверх
DaemonSuw
Дата 13.5.2009, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Проверять возвращаемое значение можно с помощью UNIVERSAL::isa( VAL, TYPE )...

Код

require UNIVERSAL ;
my $a = $f->exist;
if  (UNIVERSAL::isa ($a, 'ARRAY')) { print 'return ARRAY'}
elsif (UNIVERSAL::isa ($a, 'SQL::Abstract')) { print 'return SQL::Abstract'}
else {print 'xz'};


Это сообщение отредактировал(а) DaemonSuw - 13.5.2009, 08:15
PM MAIL ICQ   Вверх
KSURi
Дата 13.5.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Для проверки класса объекта использовать процедурный вариант не рекомендуется. Используйте вызов метода:
Код

$a->isa('SQL::Abstract') && print 'return SQL::Abstract'

а еще лучше так:
Код

use Scalar::Util qw(blessed);
blessed($a) && $a->isa('SQL::Abstract') && print ...
.

ЗЫ: я не уверен, что понял вопрос

Это сообщение отредактировал(а) KSURi - 13.5.2009, 13:00


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


Агент алкомафии
****


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

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



Цитата(KSURi @ 13.5.2009,  12:59)
а еще лучше так:
Код

use Scalar::Util qw(blessed);
blessed($a) && $a->isa('SQL::Abstract') && print ...
.

ЗЫ: я не уверен, что понял вопрос

скорее всего так

Код

sub exist {
 my $self = shift;
  $self->{key} = @_[1]     if ( !blessed(@_[1]) ); 
  $self->{value} = @_[2]  if ( !blessed(@_[2]) ); 

.........................................


Код

$f->exist->cut_xss('keys', 'keys');

PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 13.5.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



а как тут опрделеить что возвращать объект или значение?

cut_xss ждет что exist должно возвратить объект, правильно?
если мне надо иногда возвратить значение, но не объект...

как тут сделать? или никак?

Это сообщение отредактировал(а) gcc - 13.5.2009, 14:49
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 13.5.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



Цитата(KSURi @ 13.5.2009,  12:59)
ЗЫ: я не уверен, что понял вопрос

например, есть методы:
Код

$f->exist(keys' => 'keys')
$f->cut_xss('keys' => 'keys');
$f->exist(keys' => 'keys')
$f->cut_xss('keys' => 'keys');
$f->exist(keys' => 'keys')
$f->cut_xss('keys' => 'keys');
$f->exist(keys' => 'keys')
$f->cut_xss('keys' => 'keys');


можно тут сразу два инициализировать?

Код

$f->exist->cut_xss('keys' => 'keys');


ошибка! мне говрит что метод cut_xss отсутсвует, потому что объекта нету, он ушел в exist

если написать return $self то работает, но объект не всегда нужен!

как тут сделать?

Это сообщение отредактировал(а) gcc - 13.5.2009, 23:00
PM WWW ICQ Skype GTalk Jabber   Вверх
KSURi
Дата 14.5.2009, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Теперь понятно) Возможно, правильнее будет сделать редизайн методов, чем заморачиваться с конструкциями языка.
Если вы все-таки уверены, то что должен возвращать метод exist, когда не нужен объект?


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


Агент алкомафии
****


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

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



Код

 my $self = shift;
 
   $self->{key} = shift if @_; 
   $self->{value} = shift if @_;

.........................

    return $self->{value} if (wantarray);     
     return $self;


сделал так, вроде бы работает 
там не надо было defined ставить перед wantarray

Код

$f->cut_xss('text',  $c->request->params->{text})->exist;




Это сообщение отредактировал(а) gcc - 15.5.2009, 03:08
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 24.7.2009, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



есть запись, например:
Код

$f->cut_xss('text',  $c->request->params->{text})->exist;


1) как мне узнать в методе cut_xss() что поле него будет вызывается еще один метод?

2) или  как мне узнать в методе cut_xss() что поле него будет вызывается метод exist()?

Добавлено через 2 минуты и 37 секунд
Цитата(KSURi @ 14.5.2009,  11:12)
Теперь понятно) Возможно, правильнее будет сделать редизайн методов, чем заморачиваться с конструкциями языка.

вот только как его сделвть?
вот тут такой же пример http://forum.vingrad.ru/forum/topic-258166.html если знаете, то покажите пример пожалуйста с редизайном... (если там будет лучше)

Добавлено через 9 минут и 46 секунд
Цитата(DaemonSuw @ 13.5.2009,  08:11)
Проверять возвращаемое значение можно с помощью UNIVERSAL::isa( VAL, TYPE )...

Код

require UNIVERSAL ;
my $a = $f->exist;
if  (UNIVERSAL::isa ($a, 'ARRAY')) { print 'return ARRAY'}
elsif (UNIVERSAL::isa ($a, 'SQL::Abstract')) { print 'return SQL::Abstract'}
else {print 'xz'};

интересно, но вот толкьо мне нужно проверить в самом методе exist...

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


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

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


 




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


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

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