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
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.