Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Renat Araslanow                      2:5011/119.1   28 Feb 2003  13:54:09
 To : Alan Long
 Subject : несколько дурацких вопросов.
 -------------------------------------------------------------------------------- 
 
 
  Однажды 28 Feb 03 01:52, Alan Long писал All:
 
 AL> Тут вот поднакопилось несколько дурацких вопросов, которые хотелось-бы
 AL> задать почтенной публике и узнать, может-быть я заблуждаюсь.
 
 AL> Первый: прототипы для функций когда используется объектный интерфейс.
 AL> ---------------------------------------------------------------------
 AL> Хотелось-бы узнать как правильно описать прототипы функций new и bar из
 AL> модуля Foo.
 
 perldoc perlsub
 ...
 Method calls are not influenced by prototypes either, because the function to be
 called is indeterminate at compile time, since the exact code called depends on 
 inheritance.
 ...
 
 т.е. незачем.
 
 AL> Второй, про значения:
 AL> --------------------
 AL> достаточно удобная конструкция:
 AL>   $var ||= 'value';
 AL> Hо хотелось-бы что-бы значение переменной $var присвоивалось только в том
 AL> случае если $var == undef, а в случае $var == '' или $var == 0 оставалось
 AL> прежним, то есть сейчас приходится писать: $var = 'value' unless( defined
 AL> $var ); Что несколько громоздко и по скорости - не совсем ясно, иногда
 AL> получается медленне, особенно, если $var достаточно сложная переменная.
 
 1.pl
 $var=$val unless defined $var;
 
 perl -MO=Concise,-tree 1.pl
 
 <9>leave[t1]-+-<1>enter
              |-<2>nextstate(main 5 1.pl:1)
              `-null---<5>or(other->6)-+-<4>defined---ex-rv2sv---<3>gvsv
                                       `-<8>sassign-+-ex-rv2sv---<6>gvsv
                                                    `-ex-rv2sv---<7>gvsv
 2.pl
 $var||=$val;
 
 perl -MO=Concise,-tree 2.pl
 
 <7>leave[t1]-+-<1>enter
              |-<2>nextstate(main 5 2.pl:1)
              `-null---<4>orassign(other->5)-+-ex-rv2sv---<3>gvsv
                                             `-<6>sassign---ex-rv2sv---<5>gvsv
 
 потому и медленнее.
 
 AL> Можно конечно родить что-то типа:
 AL> sub _default(\$$) {
 AL>    $$_[0] = $_[1] unless defined $$_[0];
 AL> }
 AL> и использовать:
 AL> _default $var => 'value';
 
 зачем? только чтобы не пользоваться unless defined?
 в мозгу витает навязчевая фраза: "не ту страну назвали гондурасом" */_=)_/*
 
 --- [Преждевременная оптимизация -- корень всех зол Д. Кнут]
  * Origin: Чайник с программным управлениемЪ (2:5011/119.1)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 несколько дурацких вопросов.   Alan Long   28 Feb 2003 02:52:38 
 Re: несколько дурацких вопросов.   Sergey Leschenko   28 Feb 2003 14:27:33 
 несколько дурацких вопросов.   Renat Araslanow   28 Feb 2003 13:54:09 
Архивное /ru.perl/32783e5f210c.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional