On this page
Variables, scopes
本章介绍了模板尝试访问变量时发生的情况以及变量的存储方式。
当您调用Template.process
时,它将在内部创建一个Environment
对象,该对象将一直使用直到process
返回。该对象存储模板处理的运行时状态。除其他事项外,它使用assign
,macro
,local
或global
等指令存储由模板创建的变量。它永远不会尝试修改传递给process
调用的数据模型对象,也不会创建或替换存储在配置中的共享变量。
当您尝试读取变量时,FreeMarker 将按此 Sequences 查找变量,并在找到具有正确名称的变量时停止:
在环境中:
如果在循环中,则在循环变量集中。循环变量是由诸如
list
的指令创建的变量。如果在宏内,则在宏的局部变量集中。可以使用
local
指令创建局部变量。另外,宏的参数是局部变量。在当前的namespace中。您可以使用
assign
指令将变量放入命名空间。在使用
global
指令创建的变量集中。 FTL 处理这些变量就好像它们是数据模型的普通成员一样。也就是说,它们在所有名称空间中都是可见的,您可以像在数据模型中一样访问它们。
在数据模型对象中,您已经传递给
process
方法在存储在
Configuration
中的一组共享变量中
实际上,从模板作者的角度来看,这 6 层仅是 4 层,因为从该角度来看,最后 3 层(使用global
创建的变量,实际数据模型对象,共享变量)共同构成了全局变量集。
请注意,可以使用special variables从 FTL 中的特定层获取变量。