[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: еще вопросик по perl



>  DEO> как-то return из под eval и вот аналог статических переменных :D
> 
> Статические переменные - это аналог клозур (closure) для бедных (не
> знающих ничего лучше C, ну на худой конец C++).  В перле есть нормальные
> клозуры.
почитал я про клозуры

да когда надо двум функциям разделить переменную

{
  my $a;
  sub foo1
  {
    return $a+1;
  }
  sub foo2
  {
    return $a+2;
  }
}

получается действительно "для бедных"
хотя, такое обычно висит в отдельном модуле и есть не просит ;)

а вот когда эта переменная нужна только одной функции (ака генератор
бесконечной последовательности)

то вот так по моему изящнее:

mytype foo()
{
  static mytype a=init_value();
  return a+1;
}

чем так:

{
  my $a=&init_value;
  sub foo
  {
    return $a+1;
  }
}

в первом случае "а" определена там где используется, а во втором
пришлось внешний блок городить... эта, как ее
клозура ;)

собственно тут дело вкуса "как красивее"
я бы не стал на твоем месте рассуждать о бедных и богатых ;)



Reply to: