[Moscow.pm] function ref

oleg alexeenkov proler на gmail.com
Чт Дек 29 03:16:54 PST 2011


Nikolay Mishin <mi на ya.ru> писал(а) в своём письме Thu, 29 Dec 2011  
15:07:45 +0400:

> То есть создавать ссылки на функции - плохая идея
> (у меня так и не заработала передача параметров)
> ну в общем понятно,
> объектов с пакетами должно быть достаточно
> для всяких хитростей и усложнения кода
>
> жаль!

Спасибо за настроение.

>
> 29.12.2011, 15:37, "Dmitry Karpich" <meettya на gmail.com>:
>> Исчо раз.
>>
>> sub create_index ($$){
>>    my ($fh, $idx_file)=@_;
>>    print "create index func\n";
>>    }
>>
>> my $fh = 10;
>> my $idx_file = 20;
>>
>> say ' - work, but looks strange';
>> my $index_func_name=\&create_index; # JUST &create_index, NOT  
>> &create_index() !!!!!
>> $index_func_name->( $fh, $idx_file);
>>
>> say ' - much better';
>> create_index $fh, $idx_file; # just func, don`t do that on class method
>>
>> не усложняйте себе жизнь, а? :)
>>
>> Митяй.
>>
>> On Dec 29, 2011, at 1:16 PM, Nikolay Mishin wrote:
>>
>>>  Митяй, спасибо;)) книжку уже перечитываю 3-й раз,
>>>  особенно после Рефакторинга Фаулера, у них идее пересекаются
>>>
>>>  $$index_func_name->( $fh, $idx_file );
>>>  здесь у меня лишний доллар
>>>  работает и так
>>>  $index_func_name->( $fh, $idx_file );
>>>  но все-таки так прозрачно, как
>>>  &$index_func_name->( $fh, $idx_file ); !!
>>>
>>>  хотя так тоже работае, ок,
>>>  тогда ответ
>>>  &$index_func_name->( $fh, $idx_file ); !!
>>>
>>>  ясно видно, что вызывается функция
>>>
>>>  29.12.2011, 15:03, "Dmitry Karpich" <meettya на gmail.com>:
>>>>  Потому что
>>>>
>>>>  my $ref_sub1=sub {print 'By '. $_[0] };
>>>>  sub temop_sub{ print 'Hi '. $_[0] };
>>>>  my $ref_sub=\&temop_sub; # !!!!! ссылка на sub а не ссылка на ее  
>>>> результат
>>>>
>>>>  $ref_sub->(); # так - лучше всего
>>>>
>>>>  &{$ref_sub1};
>>>>
>>>>  Михаил, у вас же есть подписанная Larry книга, почитайте ее :)
>>>>
>>>>  Митяй
>>>>
>>>>  On Dec 29, 2011, at 12:48 PM, Nikolay Mishin wrote:
>>>>>   Hi MoscowPM
>>>>>
>>>>>   my $ref_sub1=sub {print 'By '. $_[0] };
>>>>>   sub temop_sub{ print 'Hi '. $_[0] };
>>>>>   my $ref_sub=\&temop_sub();
>>>>>   $$ref_sub;
>>>>>   &$ref_sub;
>>>>>   Not a CODE reference at 11_sub_ref.pl line 5.
>>>>>   &{$ref_sub1};
>>>>>
>>>>>   почему так?
>>>>>   почему я не могу вызывать именованную процедуру
>>>>>   &{$ref_sub1}; ??
>>>>>   ведь вызывать ссылку на код с помощью
>>>>>   & - лучше, чем с помощью $
>>>>>   здесь явно показывается, что вызывается процедура
>>>>>
>>>>>   Спасибо.
>>>>>   --
>>>>>   Nikolay Mishin
>>>>>   --
>>>>>   Moscow.pm mailing list
>>>>>   moscow-pm на pm.org | http://moscow.pm.org
>>>>  --
>>>>  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
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
> --
> Nikolay Mishin


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