Шаблонный набор инструментов ЗА и ЕСЛИ поведение - PullRequest
2 голосов
/ 02 декабря 2010

Я испытываю странное поведение с набором шаблонов, скажем, у меня есть структура данных (определенная в perl и переданная в качестве параметра):

( { FLAG => 1, some => data}, { some => data}, etc )

и в шаблоне у меня есть цикл вроде

[FOR ITEMS]
  [IF (FLAG) ]
    do something
  [ELSE]
    do something else
  [END]
[END]

шаблон, кажется, никогда не вводит else, единственный способ заставить его ввести else - это изменить данные:

( { FLAG => 1, some => data}, { FLAG => 0, some => data}, etc )

так, чтобы оно оценивалось как ложное. Однако, если я тогда изменю структуру данных на

( { some => data}, { some => data}, etc )

Он всегда входит в else (потому что он считает undef ложным).

Похоже, что в следующей итерации существует некоторое «переполнение» переменных, остающихся в области видимости, если только они не будут перезаписаны, это ожидаемое поведение? и если да, то где это задокументировано?

EDIT: Позже я обнаружил, что это была другая проблема, вызвавшая описанное выше поведение, потому что я использовал «ELSEIF», а не правильный «ELSIF» в другом месте шаблона. Если вы сомневаетесь, проверьте решение, предложенное jira, которое решило проблему, описанную мной в моем первоначальном посте.

1 Ответ

4 голосов
/ 02 декабря 2010

Вы можете изменить шаблон, как показано ниже, назначив переменную цикла именованному хешу.Тогда он будет вести себя так, как вы ожидаете.

[%FOREACH ITEM IN ITEMS%]

  [%IF ITEM.FLAG %]
    do something
  [%ELSE%]
    do something else
  [%END%]

[%END%]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...