本页内容:
当你给内插表达式或者指令参数提供值的时候,你可以使用变量或者更复杂的表达式.例如,x是数值8,y是数值5, (x + y)/2的值会是6.5.
在我们进入具体细节之前,先看一些具体的例子:
- 当你为内插表达式提供值时:使用方法是${表达式}.这里的表达式是你要在文本输出中的值.如${(5 + 8)/2} 会打印”6.5”.(也有可能是是”6,5”,如果你输出的语言环境不是英语的话.)
- 当你给指令提供参数时:你已经在入门章节见过if指令.这个指令的语法是: <#if 表达式>...</#if>.这里的表达式必须是一个布尔值.例如: <#if 2 < 3>,2 < 3(2小于3)是一个布尔表达式(结果为true).
快速浏览(备忘单)
- 直接赋值
- 字符串: "Foo" 或者 'Foo' 或者"It's \"quoted\"" 或者r"C:\raw\string"
- 数值: 123.45
- 布尔值: true, false
- 序列(数组): ["foo", "bar", 123.45], 1..100
- 哈希: {"name":"green mouse", "price":150}
- 取值
- 顶层变量: user
- 从哈希中取值: user.name, user["name"]
- 从序列中取值: products[5]
- 特定变量: .main
- 字符串操作
- 内插表达式 (或者连接操作): "Hello ${user}!" (or "Free" + "Marker")
- 取得一个字符: name[0]
- 序列操作
- 连接: users + ["guest"]
- 序列片段: products[10..19] 或 products[5..]
- 哈希操作
- 连接: passwords + {"joe":"secret42"}
- 算术运算: (x * 1.5 + 10) / 2 - y % 100
- 比较: x == y, x != y, x < y, x > y, x >= y, x <= y, x < y, ...等.
- 逻辑运算: !registered && (firstVisit || fromEurope)
- 内置函数: name?upper_case
- 方法调用: repeat("What", 3)
- 缺失值处理:
- 默认值: name!"unknown" 或(user.name)!"unknown" 或name! 或(user.name)!
- 测试值是否缺失: name?? 或(user.name)??
直接赋值
经常你会直接使用具体值,而不是使用一些计算结果.
字符串
直接使用字符串的话,你在文本上加引号即可,如"some text",或者使用单引号,如 'some text'.这两种形式是等价的.如果字符串本身包含着引号(“或者’)或者反斜杠”\”,你需要加上前置的反斜杠,这称为转义.其他的字符你都可以直接输入,包括换行符.例如:
${"It's \"quoted\" and
this is a backslash: \\"}
${'It\'s "quoted" and
this is a backslash: \\'}
输出结果:
It's "quoted" and
this is a backslash: \
It's "quoted" and
this is a backslash: \
注意
当然,你也直接将文本写在模版中,而不使用 ${...}.这里只是作为例子展示表达式中如何直接使用字符串.
下表是所有支持的转移字符.在模版中使用反斜杠来转义其它字符会导致模版出错.
| 转义字符 | 意义 |
| \" | 双引号(u0022) |
| \' | 单引号 (u0027) |
| \\ | 反斜杠 (u005C) |
| \n | 换行符 (u000A) |
| \r | 回车符 (u000D) |
| \t | 水平制表符(u0009) |
| \b | 退格符 (u0008) |
| \f | 换页符(u000C) |
| \l | 小于号: < |
| \g | 大于号: > |
| \a | & |
| \xCode | 使用16进制unicode表示符号 |
\x之后的code是1到4位的16进制数字.例如,在字符串中表示一个版权信息: "\xA9 1999-2001", "\x0A9 1999-2001", "\x00A9 1999-2001".你必须使用1到4位的16进制数字,否则FreeMarker会很迷茫的,呵呵.
注意到字符”${”和”#{”有特殊意义,它是用来插入值或者表达式的,(如"Hello ${user}!",变量user的值会插入到字符串中.)如果你想打印${,你需要使用原始字符串.
所谓原始字符串,指的是,在原始字符串何总反斜杠和${没有特别意义,会被当做普通文本输出.指明一个字符串是一个原始字符串,在引号前加字母r,例如:
${r"${foo}"}
${r"C:\foo\bar"}
输出:
${foo}
C:\foo\bar
没有评论:
发表评论