macro循环变量


java Freemarker中macro的循环变量是由像list这样的指令自己创建,它的作用范围只是他们的开始标记和结束标记之间。如果在一宏中,存在一个循环变量,并且循环变量的名字和宏的某参数相同,待循环结束之后并不会影响该宏参数的值。

  1. macro中使用循环变量
<#macro repeat count>  
<#list 1..count as x>  
<#nested x, x/2, x==count>  
</#list>  
</#macro>  
<@repeat count=4 ; c, halfc, last>  
${c}. ${halfc}<#if last> Last!</#if>  
</@repeat>

运行结果:

1. 0.5  
2. 1  
3. 1.5  
4. 2 Last!

macro中nestted指令也可以有循环变量(循环变量的含义见下节),调用宏的时候在宏指令的参数后面依次列出循环变量的名字,这里count是宏的参数,c, halfc,last则为循环变量

  1. macro中调用多次循环变量
<@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if>
</@repeat>
<@repeat count=4 ; c, halfc>
${c}. ${halfc}
</@repeat>
<@repeat count=4>
Just repeat it...
</@repeat>

Freemarker中macro循环变量和用户定义指令开始标记指定的数目可以不同,调用时少指定循环变量,则多指定的值不可见,调用时多指定循环变量,多余的循环变量不会被创建。