如何反转模板工具包中的匿名列表?

Posted

技术标签:

【中文标题】如何反转模板工具包中的匿名列表?【英文标题】:how to reverse an anonymous list in template toolkit? 【发布时间】:2011-01-05 14:14:46 【问题描述】:

模板工具包中是否可以反转匿名列表?

例如

[% FOREACH month IN [1..12].reverse %]
    [% month %]
[% END %]

(除非那不起作用)。

只是想知道是否有一种巧妙的方法可以在不使用变量或显式输入数组的情况下做到这一点。

【问题讨论】:

看来有人需要写 Template::Plugin::Autobox。 【参考方案1】:
<!-- show 2010 2009 2008 2007 -->
[% SET startyear = 2007 %]
[% SET endyear = 2010 %]
[% SET allyears = [ startyear .. endyear ] %]
[% FOREACH year IN alleyears.reverse %]
   <li>[% year %]</li>
[% END %]

【讨论】:

【参考方案2】:

我有点新,但是这个呢:

[% 月 = ['jan','feb','mar',...]; ## 月份数组

[% FOREACH i = [(months.size-1)-1 .. 0] %] ## 12 个元素从 -11 计数到 0 [%months[(i-1)] ##将i转换为正数 - 显示months[11],months[10] ...months[0]

【讨论】:

【参考方案3】:

抱歉,没有。能够在原地实例化匿名数组是 TT 解析器处理的一种特殊情况。如果没有分配给命名变量的中间步骤,就不能像在常规 Perl 中那样对它们进行操作。

编辑:你甚至不能传入一个子例程来尝试像这样使用:

[% FOREACH month IN my_reverse([1..12]) %]
    [% month %]
[% END %]

你也不能尝试在对象上使用方法:

[% FOREACH month IN testObj.my_reverse([1..12]) %]
    [% month %]
[% END %]

它们会编译,但在每种情况下,FOREACH 构造都会看到链的头部,例如在第一种情况下是 CODE 引用,在第二种情况下是祝福对象。

【讨论】:

谢谢亚当,知道这非常有用。

以上是关于如何反转模板工具包中的匿名列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在适当的位置反转列表中的子列表?

生成器 三元表达式 列表生成式 匿名函数 内置函数

sorted,reverse和匿名函数

html转义/反转义

模板工具包和复杂变量

Java数组列表反转