[Moscow.pm] function ref

Denis Evdokimov evdokimov.denis на gmail.com
Чт Дек 29 06:57:05 PST 2011


Не лучше ли использовать что-то вроде
my %index_sub = (
    generate_index   => \&generate_index,
    generate_index2 => \&generate_index2,
    );

29 декабря 2011 г. 18:30 пользователь Nikolay Mishin <mi на ya.ru> написал:

> Митяй,
>
> наверное, мне нужно поменять/упростить
> архитектуру скрипта, а нужно вот для чего
>
> у меня есть несколько функций и я хочу сравнить их производительность,
> и, чтобы не параметризировать функцию и не писать
> if ($f=1){
> index1;
> }elsif($f=2){
> index1;
> }
> #я, используя имя функции, как передаваемый параметр, пишу
> my $index_func='generate_index';
> my $ref_index_func = \&$index_func;
> my $index_func2='generate_index2';
> my $ref_index_func2 = \&$index_func2;
> use Benchmark;
>
> # time 3 different versions of the same code
> timethese (1000, {
>     $index_func => _create_index($filename,$ref_index_func),
>      $index_func2 => _create_index($filename,$ref_index_func2),
> });
>
> потом я уберу эти ссылки, просто для того чтобы мнеьше переписывать удобнее
> было передавать имя функции как параметр,
> в конечном варианте останется 1 функция (наиб быстрая)
>
> 29.12.2011, 18:49, "Dmitry Karpich" <meettya на gmail.com>:
> > А, ацкая копипаста, да, Николай.
> >
> > неееееТТТТТТТ..
> > не получается, это плохая практика.
> >
> > оно будет работать только так
> >
> >> sub create_index{
> >>
> >>   my ($fh, $idx_file)=@_;
> >>
> >>   print "create index func ZZ $fh, $idx_file\n";
> >>
> >>   }
> >>
> >> my $v='create_index';
> >>
> >> no strict 'refs'; # or nothing worked, but when you do it some kittens
> die
> >>
> >> &{$v}('foo','bar');
> >
> > но, госспидя, не делайте так, примерно никогда или чуть реже.
> >
> > Короче, глобальная мысль, думать все каникулы до просветления -
> >
> >> "Функция определяет форму".
> >
> > как бы прежде чем что-то сделать нужно честно ответить на вопрос
> "ЗАЧЕМ?". Ответ на этот вопрос в 95% случаев упрощает "КАК".
> >
> > Вот скажите мне честно, нафига вам резолвить литерал? Что ценного в этом
> изврате?
> >
> > Митяй
> >
> > PS. просьба - примеры должны быть copy-past worked - вставил и запустил
> (ну положим что хештег у каждого свой). Ваши таким свойством не обладают.
> Обычно.
> >
> > On Dec 29, 2011, at 4:27 PM, Nikolay Mishin wrote:
> >
> >> Митяй, еще раз, привет,
> >> так, меня Николай зовут, но это Бог с ним,
> >>
> >> классные наблы прочитал,
> >> получается так:
> >> sub create_index ($$){
> >>   my ($fh, $idx_file)=@_;
> >>   print "create index func ZZ $fh, $idx_file\n";
> >>   }
> >> $v='create_index';
> >> &{$v}(10);
> >> и ссылка не нужна, просто как параметр передаем имя функции!
> >
> > --
> > Moscow.pm mailing list
> > moscow-pm на pm.org | http://moscow.pm.org
>
> --
> Nikolay Mishin
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20111229/f40ebe3c/attachment.html>


Подробная информация о списке рассылки Moscow-pm