前页 | 后页 |
分支宏
分支宏提供if-then-else构造。 CTF支持通过这些宏进行有限形式的分支:
- 如果
- elseIf
- 其他
- 万一
- endTemplate(退出当前模板)
%if <测试> <操作员> <测试>%
其中<operator>可以是以下之一:
- ==
- !=
- <(数学比较,小于)
- >(数学比较,大于)
- <=(数学比较,小于或等于)
- > =(数学比较,大于或等于)
- 字符串文字,用双引号引起来
- 直接替换宏,不包含百分号
- 可变参考
分支可以嵌套,并且可以使用以下条件之一指定多个条件:
- 和,或
- 要么
如果字符串的条件语句区分大小写,则“字符串”不等于“ A STRING”。因此,在某些情况下,最好设置变量$ str = TO_LOWER(variable)或TO_UPPER(variable),然后与特定情况进行比较。
条件语句不支持宏。最好将宏(字符串)的结果分配给变量,然后在比较中使用该变量。
$ fldType =%TO_LOWER($ parameter1)%
$ COMMENT =“对日期和时间字段类型使用前4个字符”
$ fldType4 =%左($ fldType,4)%
%if $ fldType4 ==“日期”%
约会时间
%万一%
这将使用值“ Datetime”,“ DATETIME”或“ Date”的参数,并返回“ Datetime”。
必须使用endif或endTemplate宏来表示分支的结尾。另外,如果正在执行相应的分支,则endTemplate宏会使模板立即返回。
例子1
%if elemType ==“接口”%
;
%其他%
%OperationBody%
%万一%
在这种情况下:
- 如果elemType为“接口”,则返回分号
- 如果elemType不是“ Interface”,则调用名为Operation Body的模板
例子2
$ bases =“ ClassBase”
$ interfaces =“”%
%if $ bases!=“”和$ interfaces!=“”%
:$ bases,$ interfaces
%elseIf $ bases!=“”%
:$ bases
%elseIf $ interfaces!=“”%
:$接口
%万一%
在这种情况下,返回的文本是':ClassBase'。
使用布尔值的条件
使用涉及系统复选框(布尔字段)的条件(例如Attribute.Static(attStatic))设置分支时,条件语句将写为:
%if attStatic ==“ T”%
例如:
如果attCollection ==“ T”或attOrderedMultiplicity ==“ T”%
%endTemplate%