数据模型一目了然

如您所见,数据模型基本上是一棵树。该树可以任意复杂和深入,例如:

(root)
  |
  +- animals
  |   |
  |   +- mouse
  |   |   |
  |   |   +- size = "small"
  |   |   |
  |   |   +- price = 50
  |   |
  |   +- elephant
  |   |   |
  |   |   +- size = "large"
  |   |   |
  |   |   +- price = 5000
  |   |
  |   +- python
  |       |
  |       +- size = "medium"
  |       |
  |       +- price = 4999
  |
  +- message = "It is a test"
  |
  +- misc
      |
      +- foo = "Something"

像目录一样起作用的变量(根animalsmouseelephantpythonmisc)称为**。哈希通过查询名称(例如“动物”,“鼠标”或“价格”)存储其他变量(所谓的 * sub 变量*)。

存储单个值(sizepricemessagefoo)的变量称为“标量”。

当您想在模板中使用子变量时,请从根目录指定其路径,并用点分隔步骤。要访问mouseprice,请从根目录开始,进入animals,然后进入mouse,然后进入price。所以你写animals.mouse.price

另一重要变量是** sequences。它们存储像哈希一样的子变量,但是这里的子变量没有名称,它们只是列表中的项。例如,在此数据模型中,animalsmisc.fruits是序列:

(root)
  |
  +- animals
  |   |
  |   +- (1st)
  |   |   |
  |   |   +- name = "mouse"
  |   |   |
  |   |   +- size = "small"
  |   |   |
  |   |   +- price = 50
  |   |
  |   +- (2nd)
  |   |   |
  |   |   +- name = "elephant"
  |   |   |
  |   |   +- size = "large"
  |   |   |
  |   |   +- price = 5000
  |   |
  |   +- (3rd)
  |       |
  |       +- name = "python"
  |       |
  |       +- size = "medium"
  |       |
  |       +- price = 4999
  |
  +- misc
      |
      +- fruits
          |
          +- (1st) = "orange"
          |
          +- (2nd) = "banana"

要访问序列的子变量,请在方括号中使用数字索引。索引从 0 开始(程序员习惯从 0 开始),因此第一个项目的索引为 0,第二个项目的索引为 1,依此类推。因此,要获取第一个动物的名称,您可以编写animals[0].name。要获得misc.fruits中的第二项(字符串"banana"),请编写misc.fruits[1]。 (实际上,您通常只是按 Sequences 遍历序列,而不在乎索引,但是将是shown later。)

标量可以进一步分为以下几类:

  • 字符串:文本,即上面的“ m”,“ o”,“ u”,“ s”,“ e”之类的任意字符序列。例如,name -s 和size -s 是上面的字符串。

  • 数字:这是一个数字值,类似于上面的price -s。字符串"50"和数字50是 FreeMarker 中完全不同的两件事。前者只是两个字符的序列(对于人类来说恰好可以理解为一个数字),而后者是可以在算术计算中使用的数值。

  • 类似于日期的日期:日期时间(存储日期和一天中的时间),日期(无时间)或时间(一天中的时间,无日期)。

  • 布尔值:对/错(是/否,打开/关闭等)。像动物一样,它可能有一个protected子变量,该子变量存储动物是否受到保护。

Summary:

  • 数据模型可以可视化为树。

  • 标量存储单个值。该值可以是字符串或数字,也可以是日期时间/日期/时间或布尔值。

  • 散列是存储其他变量并将其与唯一查找名称关联的容器。

  • 序列是按 Sequences 存储其他变量的容器。可以通过数字索引(从 0 开始)检索存储的变量。

Note:

这里还有其他一些更高级的值类型,例如方法和指令。