1. 当调用Template.process方法时, 它会在方法内部创建一个Environment对象, 在process返回之前一直使用。该对象存储模板执行时的运行状态信息。除了这些, 它还存储由模板中指令, 如: assign, macro, local或global创建的变量。它不会尝试修改传递给process的数据模型对象, 也不会创建或替换存储在配置中的共享变量。

2. 当你想要读取一个变量时, FreeMarker将会以这种顺序来查找, 直到发现了完全匹配的的变量名称才会停下来:

2.1. 在Environment中:

2.1.1. 如果在循环中, 在循环变量的集合中。循环变量是由如list等指令来创建的。

2.1.2. 如果在宏中, 在宏的局部变量集合中。局部变量可以由local指令创建。而且, 宏的参数也是局部变量。

2.1.3. 在当前的命名空间中。可以使用assign指令将变量放到一个命名空间中。

2.1.4. 在由global指令创建的变量集合中。FTL将它们视为数据模型的普通成员变量一样来控制它们。也就是说, 它们在所有的命名空间中都可见, 你也可以像访问一个数据模型中的数据一样来访问它们。

2.2. 在传递给process方法的数据模型对象中。

2.3. 在Configuration对象存储的共享变量集合中。

3. 在实际操作中, 来自模板设计者的观点是这6种情况应该只有4种, 因为从那种观点来看, 后面3种(由global创建的变量, 真实的数据模型对象, 共享变量)共同构成了全局变量的集合。

023_运行时变量和范围相关推荐

  1. python 运行时 变量_python运行过程,变量,符号

    1,python运行过程 2,编译型,解释型 编译型,  C,  C++     ------>准备好的一桌子菜,直接吃 一次性把你的代码编译生成机器能够识别的二进制码 解释型:      py ...

  2. C++11 运行时变量类型判断

    #include <typeinfo> string name = "cpp"; int age = 14; cout << typeid(age).nam ...

  3. 编译器设计-RunTime运行时环境

    编译器设计-RunTime运行时环境 Compiler Design - Run-Time Environment 作为源代码的程序仅仅是文本(代码.语句等)的集合,要使其活动,它需要在目标计算机上执 ...

  4. Go 语言运行时环境变量快速导览

    原文: http://dave.cheney.net/2015/11/29/a-whirlwind-tour-of-gos-runtime-environment-variables Go 语言运行时 ...

  5. iOS之Xcode运行时环境变量汇总说明

    变量名 说明 解释 OBJC_PRINT_OPTIONS list which options are set 输出OBJC已设置的选项 OBJC_PRINT_IMAGES log image and ...

  6. 类和对象运行时在内存里是怎么样的?各种变量、方法在运行时是怎么交互的?

    转载自   类和对象运行时在内存里是怎么样的?各种变量.方法在运行时是怎么交互的? 在回答这个问题之前先了解一下Java的一些基础知识. 我们知道Java程序运行在虚拟机环境里,那我们先看一下虚拟机的 ...

  7. 方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?

    方法区(落地实现jdk7永久代,jdk8元空间),元空间并不在虚拟机中,而是使用本地内存,它和堆在逻辑上是连续的,但在物理上是不连续的,所以也叫非堆. 1.此区域是线程共享的.储存已加载的类型信息.常 ...

  8. Go 语言运行时环境变量快速

    Go 语言运行时环境变量快速导览 Go Runtime除了提供:GC, goroutine调度, 定时器,network polling等服务外, 还提供其它一些工具设施,用于开启额外的调试输出, 或 ...

  9. UE4 在游戏运行时更改变量 (通过鼠标滑轮来更改第一人称角色的最大行走速度)

    在上一篇博客中(UE4 更改组件变量 (以修改第一人称角色模板的最大行走速度和跳跃高度为例))已经创建了最大行走速度这个变量,如何在游戏运行时修改它从而达到动态调整速度的效果? 效果: 步骤: 1.创 ...

最新文章

  1. mysql9索引实战_mysql 索引实战 | 学步园
  2. 大规模运行MongoDB应该知道的10件事
  3. 有关Linux下的一些配置
  4. [转载] vim风格设置
  5. eclipse汉化完成常见问题的解决方案
  6. 5G无线技术基础自学系列 | 大规模天线阵列
  7. 《终身成长》学习总结
  8. 从rman 备份中恢复表
  9. 多分类学习(OvO、OVR、MVM 原理区别)
  10. 国产GM8220,USB2.0集线器,替换汤铭的FE1.1,USB HUB,替换创维GL850
  11. 工业网关作为数据采集、数据转发的重要设备,如何服务与工业互联网
  12. android 百度地图获取城市,Android 百度地图获取两点之间的距离和推荐的驾车路线...
  13. 智源 - 看山杯 专家发现算法大赛 2019 知乎
  14. 春晚 “北帝” “东邪”
  15. java 授权对象初始化失败
  16. MATLAB中如何用对数方式显示图形坐标?
  17. 【数据压缩作业9】H.264码流分析仪
  18. 使用rabbitmq实现短信验证码的的发送
  19. mysql sdo geometry_SDO_Geometry说明
  20. python解析json多层_python解析多层json操作示例

热门文章

  1. C++学习手记五:C++流操作
  2. TCP/IP/ICMP 学习实践
  3. Intellij IDEA下一个Tomcat启动带多个虚拟目录和JDNI数据源应用的方法
  4. 返回空的List集合
  5. grantrevoke
  6. c# 扩展方法奇思妙用变态篇四:string 的翻身革命
  7. 多协议标签交换(MPLS)技术的潜在弱点—Vecloud
  8. 什么是网络地址转换(NAT)—Vecloud 微云
  9. Windows Server 2008防火墙问题及Sql Server2005用户登录问题
  10. Kuebernetes之DaemonSet