Template Toolkit(русская редакция) |
|
||
|
Template::Stash::Context |
|
ОБЗОР |
[ Индекс ] [ Модули ] [ Наверх ] |
use Template; use Template::Stash::Context; my $stash = Template::Stash::Context->new(\%vars); my $tt2 = Template->new({ STASH => $stash }); |
ОПИСАНИЕ |
[ Индекс ] [ Модули ] [ Наверх ] |
Это альтернативный объект хранилища (stash), который включает патч от Крейга Барретта (Craig Barratt), который реализует новые виртуальные методы, позволяющие точечным переменным шаблона указать в каком контексте - скалярном или списковом - должны вызываться функции и методы объектов. Он немного перегружает каждый вызов хранилища и я отношусь настороженно к накладыванию этого патча на версию модуля ядра без предварительного исследования возможных эффектов. Таким образом, сейчас он реализован как отдельный модуль хранилища, что позволяет нам оттестировать его, замерить его производительность и включать/выключать его по мере надобности. Вот что Крейг говорит об этом: Это более хороший набор возможностей для ядра. Во вложении новая версия Stash.pm (на базе версии TT 2.02), которая: поддерживает специальный виртуальный метод "scalar", который принудительно вызывает функцию в скалярном контексте, например: cgi.param("foo").scalar вызывает cgi.param("foo") в скалярном контексте. По умолчанию вызов происходит в списочном контексте. Если операнд не является функцией, scalar ведет себя как аналог в perl (то есть: для скаляров ничего не выполняет, для массивов возвращает размер, и т.д.). поддерживает специальный виртуальный метод "ref", который ведет себя аналогично функции ref в perl. Если он применяется к функции, то функция не вызывается. Например: cgi.param("foo").ref не вызывает cgi.param, а возвращает "CODE". Аналогично, HASH.ref, ARRAY.ref возвращает, то что и следует ожидать. содержит новый скалярный и списочный виртуальный метод, называемый "array", который оставляет массивы без изменений, а скаляры преобразует в одноэлементные массивы. позволяет применять скалярные виртуальные методы к массивами и хешам поэлементно, например: ARRAY.repeat(3) повторяет каждый из элементов массива. позволяет применять списковые виртуальные методы к скалярам через преобразование скаляров в одно-элементные массивы (как при явном использовании "array"). Таким образом, становится возможным выполнять такие операции как SCALAR.size, SCALAR.join и получать полезные результаты. Это также означает, что теперь можно безопасно использовать x.0, чтобы получить первый элемент, вне зависимости от того является x массивом или скаляром. Новый Stash.pm прошел набор тестов для TT 2.02. Но я особо не тестировал новые возможности. Одна основная проблема реализации заключается в том, что виртуальные методы "scalar" и "ref" имеют более высокий приоритет по сравнению с именами переменных, определенных пользователем. |
АВТОР |
[ Индекс ] [ Модули ] [ Наверх ] |
Энди Уардли (Andy Wardley <abw@andywardley.com>) |
ВЕРСИЯ |
[ Индекс ] [ Модули ] [ Наверх ] |
1.59, поставляется в составе Template Toolkit версии 2.14, дата релиза - 4 октября 2004. |
АВТОРСКИЕ ПРАВА |
[ Индекс ] [ Модули ] [ Наверх ] |
Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved. Copyright (C) 1998-2002 Canon Research Centre Europe Ltd. Этот модуль является свободно-распространяемым программным обеспечением; вы можете распространять и/или модифицировать его на тех же условиях, что и Perl. |
СМОТРИ ТАКЖЕ |
[ Индекс ] [ Модули ] [ Наверх ] |