Template Toolkit(русская редакция) |
|
||
|
Template::Iterator |
|
ОБЗОР |
[ Индекс ] [ Модули ] [ Наверх ] |
my $iter = Template::Iterator->new(\@data, \%options); |
ОПИСАНИЕ |
[ Индекс ] [ Модули ] [ Наверх ] |
Модуль Template::Iterator определяет общий итератор данных для использования директивой FOREACH. Его можно использовать в качестве базового класса для собственных итераторов. |
ПУБЛИЧНЫЕ МЕТОДЫ |
[ Индекс ] [ Модули ] [ Наверх ] |
new($data)Конструктор. В качестве первого параметра передается ссылка на список значений. Последовательные вызовы get_first() и get_next() будут возвращать каждый элемент из списка. my $iter = Template::Iterator->new([ 'foo', 'bar', 'baz' ]); Конструктор также может принять ссылку на хеш и преобразует его в список, в котором каждый элемент будет хешем, содержащим элементы 'key' и 'value', отсортированный по ключам хеша. my $iter = Template::Iterator->new({ foo => 'Foo Item', bar => 'Bar Item', }); Это эквивалентно следующему: my $iter = Template::Iterator->new([ { key => 'bar', value => 'Bar Item' }, { key => 'foo', value => 'Foo Item' }, ]); Когда передается одиночный элемент, не являющийся ссылкой на массив, конструктор автоматически создает список, содержащий этот одиночный элемент. my $iter = Template::Iterator->new('foo'); Это эквивалентно следующему: my $iter = Template::Iterator->new([ 'foo' ]); Обратите внимание, что если одиночный элемент является объектом, образованным связыванием ссылки на массив, он не будет интерпретирован как массив и будет сохранен в список, содержащий одну ссылку на объект. my $list = bless [ 'foo', 'bar' ], 'MyListClass'; my $iter = Template::Iterator->new($list); эквивалентно: my $iter = Template::Iterator->new([ $list ]); Если объект предоставляет метод as_list(), Template::Iterator вызовет этот метод, чтобы получить список данных. Например: package MyListObject; sub new { my $class = shift; bless [ @_ ], $class; } package main; my $list = MyListObject->new('foo', 'bar'); my $iter = Template::Iterator->new($list); Функционально это эквивалентно следующему: my $iter = Template::Iterator->new([ $list ]); Итератор вернет только один элемент, ссылку на объект MyListObject $list. Добавив метод as_list() к классу MyListObject, можно заставить конструктор Template::Iterator обрабатывать объект как список и использовать содержащиеся в нем данные. package MyListObject; ... sub as_list { my $self = shift; return $self; } package main; my $list = MyListObject->new('foo', 'bar'); my $iter = Template::Iterator->new($list); Теперь итератор вернет два элемента 'foo' и 'bar', которые содержит MyObjectList. get_first()Возвращает пару ($value, $error) для первого элемента набора итератора. Вовращаемое значение $error может быть нулевым или неопределенным, что означает, что настоящий элемент данных был успешно возвращен. Возвращает ошибку STATUS_DONE, если список пуст. get_next()Возвращает пару ($value, $error) для следующего элемента набора итератора. Возвращает ошибку STATUS_DONE, если все элементы списка были обойдены. get_all()Возвращает пару (\@values, $error) для всех оставшихся элементов набора итератора. Возвращает ошибку STATUS_DONE, если все элементы списка были обойдены. size()Возвращает размер набора данных или undef, если он неизхветсен. max()Возвращает максимальный номер индекса (то есть индекс последнего элемента), который эквивалентен size() - 1. index()Возвращает текущий номер индекса, который находится в диапазоне между 0 и max(). count()Возвращает текущее число итераций в диапазоне между 1 и size(). Эквивалентно index() + 1. Обратите внимание, что для обратной совместимости в качестве алиаса count() поддерживается number(). first()Возвращает логическое значение, указывающее находится ли итератор на первой итерации набора. last()Возвращает логическое значение, указывающее находится ли итератор на последней итерации набора. prev()Возвращает предыдущий элемент набора данных или undef, если итератор находится на первом элементе. next()Возвращает следующий элемент набора данных или undef, если итератор находится на последнем элементе. |
АВТОР |
[ Индекс ] [ Модули ] [ Наверх ] |
Энди Уардли (Andy Wardley <abw@andywardley.com>) |
ВЕРСИЯ |
[ Индекс ] [ Модули ] [ Наверх ] |
2.65, поставляется в составе 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. |
СМОТРИ ТАКЖЕ |
[ Индекс ] [ Модули ] [ Наверх ] |