前页 后页

分支宏

分支宏提供if-then-else构造。 CTF支持通过这些宏进行有限形式的分支:

  • 如果
  • elseIf
  • 其他
  • 万一
  • endTemplate(退出当前模板)
if和elseIf宏的基本结构是:

%if <测试> <操作员> <测试>%

其中<operator>可以是以下之一:

  • ==
  • !=
  • <(数学比较,小于)
  • >(数学比较,大于)
  • <=(数学比较,小于或等于)
  • > =(数学比较,大于或等于)
和<test>可以是以下之一:
  • 字符串文字,用双引号引起来
  • 直接替换宏,不包含百分号
  • 可变参考
请注意,如果您使用数学比较运算符之一,则<test>必须是字符串格式的十进制数。

分支可以嵌套,并且可以使用以下条件之一指定多个条件:

  • 和,或
  • 要么
当指定多个条件时,“和”和“或”具有相同的优先顺序,并且条件从左到右处理。

如果字符串的条件语句区分大小写,则“字符串”不等于“ 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%

学到更多