Интернет магазин китайских планшетных компьютеров



Компьютеры - Template Toolkit - Недостатки

07 мая 2011


Оглавление:
1. Template Toolkit
2. Недостатки
3. Подсказки



Из-за того, что в Перле присутствуют переменные разных типов, а в Template Toolkit все они вызываются одинаково, возникают неоднозначности.

Есть особенности работы с объектами-хэшами, и объектами-массивами:

При попытке прохода по объекту-массиву через FOREACH выяснится, что в списке будет присутствовать только один элемент — сам объект.

А при обращения к элементу arrayobj.$index, где index — индекс требуемого элемента, Template Toolkit попытается вызвать метод с таким именем. А методов с именами 0, 7, 12 и т. д. в языках программирования, в общем-то, не бывает.

Для решения этих проблем в код класса нужно добавить метод as_list — именно его Template Tookit вызывает при использовании FOREACH.

sub as_list { }] }

Смысл этого кода состоит в том, что берётся сам объект, превращается в обычный массив, и сразу же преобразуется в ссылку на массив — то, что нужно для FOREACH.

Как as_list помогает при выборке конкретных элементов из объекта?

aref = aref_object.as_list;
aref.0;
aref.1;

Проблемы вызывает присутствие в классе функции AUTOLOAD:

  1. она перехватывает все вызовы виртуальных методов Template Toolkit
  2. так как Template Toolkit пытается сначала найти метод объекта с указанным именем, и только при неудаче — найти одноимённый ключ хэша, становится понятно, что AUTOLOAD также перехватывает все вызовы к ключам хэша

Вторую проблему можно решить так:

sub AUTOLOAD {
   my  = $AUTOLOAD=~/$/; #Найти имя запрашиваемого метода
   if  { #Если у объекта существует ключ с именем  $sub_name,
      return $_{$sub_name}      #то вернуть его
   }
}


Просмотров: 2518


<<< Smarty