On this page
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 *,它是一个哈希值(又是类似盒子的东西),因此,值是可以存储在变量中的值(例如user
或cargo
或cargo.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”的变量,因此该变量不起作用。
我们的示例数据模型(即根哈希)包含更多的哈希和序列(lotteryNumbers
和cargo
),这可能会使某些人感到困惑。没什么特别的。哈希包含其他变量,这些变量具有值,可以是字符串,数字等,当然也可以是哈希或序列。因为,如前所述,序列或哈希只是一个值,就像字符串或数字一样。