Basics

Page Contents

Note:

假定您已经阅读了Getting Started章。

理解值和类型的概念对于理解数据模型至关重要。但是,正如您将看到的,值和类型的概念并不局限于数据模型。

什么是值?

true 的程序员可以安全地跳过此部分。

您从日常 math 中知道的术语“值”的例子是 16、0.5 等,即数字。对于计算机语言,值术语具有更广泛的含义,因为值不必是数字。例如,使用以下数据模型:

(root)
 |
 +- user = "Big Joe"
 |
 +- today = Jul 6, 2007
 |
 +- todayHoliday = false
 |
 +- lotteryNumbers
 |   |
 |   +- (1st) = 20
 |   |
 |   +- (2nd) = 14
 |   |
 |   +- (3rd) = 42
 |   |
 |   +- (4th) = 8
 |   |
 |   +- (5th) = 15
 |
 +- cargo
     |
     +- name = "coal"
     |
     +- weight = 40

我们说user变量的* value 为“ Big Joe”(字符串),today value 为 2007 年 7 月 6 日(日期),todayHoliday value 为 false(布尔值,即是/否)。 lotteryNumbers value 是包含 20、14、42、8、15 的序列。在某种意义上lotteryNumbers肯定包含多个值,因此lotteryNumbers当然是多个值(例如,其中的第二项是 14),但lotteryNumbers本身还是一个值。就像一个盒子,里面装有许多其他物品。整个盒子可以看作是单个物品。最后同样重要的是,我们还有cargo的* value *,它是一个哈希值(又是类似盒子的东西),因此,值是可以存储在变量中的值(例如usercargocargo.name)。但是,不必将值存储在变量中称为值,例如,此处的值为 100:

<#if cargo.weight < 100>Light cargo</#if>

计算的暂时性结果也称为值,例如在执行此模板时将显示 20 和 120(它将打印 120):

${cargo.weight / 2 + 100}

最后的说明:将两个值 40(货物的重量)和 2 相除的结果是,创建了一个新值 20.然后向其添加 100,因此将创建值 120.然后打印 120(${...}),然后 continue 执行模板,所有这些值都消失了。

当然,现在您可以体会到价值术语的含义。

什么是类型?

值具有重要的方面,即类型。例如,user变量的值的类型为字符串,而lotteryNumbers变量的值的类型为 sequence。值的类型很重要,因为它在很大程度上决定了如何以及在何处使用该值。就像${user / 2}是一个错误,但${cargo.weight / 2}可以工作并显示 20,因为除法仅对数字有意义,而对字符串则无意义。或者,仅当cargo是哈希时,才使用cargo.name中的点才有意义。或者,您只能列出<#list ...>个序列。或者,<#if ...>的条件必须为布尔值。等等。

Note:

有点用语...说“布尔值”或“布尔值”或“布尔值类型”都是一样的。

值可以同时使用多种类型,尽管很少使用。例如,在mouse下面的数据模型中,它既是字符串又是哈希:

(root)
 |
 +- mouse = "Yerri"
     |
     +- age = 12
     |
     +- color = "brown"

如果将此模板与上面的数据模型合并:

${mouse}       <#-- uses mouse as a string -->
${mouse.age}   <#-- uses mouse as a hash -->
${mouse.color} <#-- uses mouse as a hash -->

输出将是:

Yerri
12
brown

数据模型是哈希

查看各种数据模型示例,您可能已经意识到:标记为“(root)”的事物只是 hash 类型的值。当您编写类似user的内容时,这意味着您希望将“ user”变量存储在根哈希中。就像您正在编写root.user一样,除了没有名为“ root”的变量,因此该变量不起作用。

我们的示例数据模型(即根哈希)包含更多的哈希和序列(lotteryNumberscargo),这可能会使某些人感到困惑。没什么特别的。哈希包含其他变量,这些变量具有值,可以是字符串,数字等,当然也可以是哈希或序列。因为,如前所述,序列或哈希只是一个值,就像字符串或数字一样。