On this page
local
Page Contents
Synopsis
<#local name=value>
or<#local name1=value1 name2=value2 ... nameN=valueN>
or<#local name> capture this </#local>
Where:
name
: the name of the local object in the root. It is not an expression. However, it can be written as a string literal, which is useful if the variable name contains reserved characters, for example<#local "foo-bar" = 1>
. Note that this string literal does not expand interpolations (as"${foo}"
).=
: Assignment operator, which can also be one of the shorthand assignment operators (++
,+=
, etc.), just like with theassign
directive,value
: the value to store. Expression.
Description
It is similar to assign directive, but it creates or replaces local variables. This only works inside macro definitions and function definitions.
For more information about variables, read this: Template Author's Guide/Miscellaneous/Defining variables in the template
Note:
A frequent mistake is trying to use assign
to change a local variable like: <#macro m><#local x = 1>${x}<#assign x = 2>${x}</#macro>
. This prints 11
, not 12
, because assign
creates/replaces the x
of the namespace that the template belongs to, and doesn't change the x
local variable. Local variables should be always set with the local
directive, not just for the fist time.