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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать существуен ли функция, Узнать существуен ли функция 
:(
    Опции темы
Ramirez
Дата 8.12.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А я не знаю другого способа вызвать метод, который динамически задается в процессе выполнения скрипта.

Но в данном примере я хотел только проверить наличие, и обычно пользовался методом CAN. но сравнив насколько UNIVERSAL::CAN проигрывает методу defined захотелось найти альтернативу. но кроме eval ничего в голову не пришло.

дело в том, что у метода UNIVERSAL::CAN есть одно преимущество: имя метода ему передается в переменной.
PM ICQ   Вверх
KSURi
Дата 8.12.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

$ perl -MBenchmark=cmpthese
package Foo;
sub bar { 'bar' }
package main;
$var = bless {}, 'Foo';
print $var->bar, "\n";
cmpthese(
  1_000_000,
  { defined => sub { defined &{ref $var . '::bar' } },
    eval    => sub { eval 'defined &' . ref($var) . '::bar' },
    can     => sub { $var->can('bar') }, },
);
^D
bar
             Rate    eval defined     can
eval      40917/s      --    -97%    -98%
defined 1492537/s   3548%      --    -31%
can     2173913/s   5213%     46%      --
$



Это сообщение отредактировал(а) KSURi - 8.12.2008, 22:37


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


Опытный
**


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

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



Результаты интересные.

а вот за эту конструкцию, отдельное спасибо. я так и не смог до нее додуматься:

Код

defined &{ref $var . '::bar' }

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


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

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


 




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


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

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