[Moscow.pm] function ref

Nikolay Mishin mi на ya.ru
Чт Дек 29 06:30:51 PST 2011


Митяй, 

наверное, мне нужно поменять/упростить 
архитектуру скрипта, а нужно вот для чего

у меня есть несколько функций и я хочу сравнить их производительность,
и, чтобы не параметризировать функцию и не писать
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