基本内容
这里假设你已经阅读完 入门 章节的内容了。
理解数值和类型的概念是理解数据模型的关键和基础。 但数值和类型的概念并不局限于数据模型,下面你就会看到了。
什么是数值?
这部分对于程序员来说可以直接跳过的。
正如你知道的,来自于每天所使用的数字,比如16,0.5等这些用语就是 数值 的示例,也就是数字。在计算机语言中, 这些用语有着更广泛的含义,比如数值并不一定是数字类型值,比如面这个数据模型:
(root) | +- user = "Big Joe" | +- today = Jul 6, 2007 | +- todayHoliday = false | +- lotteryNumbers | | | +- (1st) = 20 | | | +- (2st) = 14 | | | +- (3rd) = 42 | | | +- (4th) = 8 | | | +- (5th) = 15 | +- cargo | +- name = "coal" | +- weight = 40
变量 user
的 value
是"Big Joe"(字符串), today
的 value
是 Jul 6, 2007 (日期),todayHoliday
的
value 是false(布尔值,比如yes/no等值)。
lotteryNumbers
的 value
是包含20,14, 42, 8, 15的序列。当然在这种意义上,
lotteryNumbers
是多值类型。它 包含
多个值(比如,其中的第二项的 value 是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就计算出来了,接着就打印出来。
(${...}
),之后模板继续向下执行,
直到所有结果都计算出来。
现在你应该能体会到数值这个词的含义了。
什么是类型?
数值中非常重要的一个概念就是类型。比方说,变量
user
的类型是字符串,变量 lotteryNumbers
的类型是序列。数值的类型这个概念非常的重要,因为它决定了这些数值可以在哪里使用的最大限度。
比如说,使用 ${user / 2}
就是错误的,但是使用
${cargo.weight / 2}
就能计算出结果,为20,
因为算术中的除法仅对数字类型的值有效,而不能用于字符串。
仅当 cargo
是一个哈希表变量时,表达式 cargo.name
才可以使用点。也可以用 <#list ...>
指令来遍历序列。而 <#if ...>
指令的条件只能是布尔值等。
这里说一点点的术语:称 "布尔" 或 "布尔值" 或 "布尔类型" 都是相同的含义。
数值同时也可以含有多种类型,尽管很少这么使用。看一下下面这个数据模型
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)"所标识的内容就是哈希表类型的值。
当编写如 user
这样的代码时,那就意味着要把"user"变量存储在哈希表的根上。
就像编写 root.user
一样,这里但并没有名"root"为的变量,
那么这就起不到任何作用了。
某些人也许会被这种数据模型的例子所困惑,也就是说,根哈希表包含更多的哈希表或序列
(lotteryNumbers
and cargo
)。其它就没有更特殊的内容了。
哈希表包含其他变量,那些变量包含其它值,这些数值可以是字符串,数字等变量,
当然也可以是哈希表或序列变量。最初我们解释过的,就像字符串和数字,
序列或哈希表也是一种值的表示形式。