## 13.3. 轉義 無效的 VTL 指令
VTL 可以通過反斜杠("/")來進行轉義,directives can be escaped with the backslash character in a manner similar to valid VTL references.
```
## #include( "a.txt" ) renders as <contents of a.txt>
#include( "a.txt" )
## /#include( "a.txt" ) renders as /#include( "a.txt" )
/#include( "a.txt" )
## //#include ( "a.txt" ) renders as /<contents of a.txt>
//#include ( "a.txt" )
```
在轉義在一個單一指令內包含多個腳本元素(比如f-else-end語句)的指令時應多加小心。下面是一個典型的VTL if語句;
```
#if( $jazz )
Vyacheslav Ganelin
#end
```
如果 $jazz為 true,輸出是
```
Vyacheslav Ganelin
```
如果 $jazz 為false,將沒有輸出。轉義腳本元素將改變輸出。考慮下面的情況;
```
/#if( $jazz )
Vyacheslav Ganelin
/#end
```
不管 $jazz 是真或假,輸出都是
```
#if($ jazz )
Vyacheslav Ganelin
#end
```
事實上,因為所有腳本元素都被轉義了, $jazz 永遠不會被求值。將設反斜杠在被合法轉義的腳本元素之前
```
//#if( $jazz )
Vyacheslav Ganelin
//#end
```
這時,如果$jazz 為真,輸出是
```
/ Vyacheslav Ganelin
/
```
為理解這個情況,請注意在一個新行結束是將在輸出中忽略新的一行。因此,經過#if()前的'//' 加工后,#if()塊緊跟第一個'/'。最后一個/位于新的一行,因為在'Ganelin'后又一個新行,所以,最后的那個位于#end 之前的//是語句塊的一部分。
如果 $jazz 為false,這里將沒有輸出。注意,在開始破壞了if語句的情況將不能被正確轉義:
```
///#if( $jazz )
Vyacheslave Ganelin
//#end
```
這里,#if 被轉義,但有一個#end 被保留了;所以有多個結束語句將導致解析錯誤。
- 1. 關于
- 2. 什么是Velocity?
- 3. Velocity 可以做什么?
- 3.1. Mud Store 示例
- 4. Velocity模板語言(VTL): 介紹
- 5. Hello Velocity World!
- 6. 注釋
- 7. 引用
- 7.1. 變量Variables
- 7.2. 屬性
- 7.3. 方法
- 8. 形式引用符Formal Reference Notation
- 9. 安靜引用符Quiet Reference Notation
- 11. Case Substitution
- 12. 指令
- 12.1. #set
- 12.2. 字面字符串
- 12.3. 條件
- 12.3.1 If / ElseIf / Else
- 12.3.2 關系和邏輯操作符
- 12.4. 循環
- 12.4.1. Foreach 循環
- 12.5. 包含
- 12.6. 解析
- 12.7. 停止
- 12.10. 宏
- 12.10.1. Velocimacro 參數
- 12.10.2. Velocimacro 屬性
- 12.10.3. Velocimacro Trivia
- 13. Getting literal
- 13.1. 貨幣字符
- 13.2. 轉義 有效的 VTL 指令
- 13.3. 轉義 無效的 VTL 指令
- 14. VTL 格式化問題
- 15. 其它特征和雜項
- 15.1. 數學特征
- 15.2. 范圍操作符
- 15.3. 進階:轉義和!
- 15.4. Velocimacro 雜記
- 15.5. 字符串聯