控制结构

扩展函数语言提供了控制程序执行的常用语句。

  • 否则
  • 一边做,一边重复直到
  • 数值为
  • 打破
  • 转到

否则

如果语句根据一个或多个条件选择要执行的语句块。有三种形式:

如有需要,请填写表格

If表达式不为false或nil end 

如果有,请填写表格

else语句执行If表达式为false或nil end 

如果是elseif else表单

elseif expression2 then statements to execute If expression2 is not false or nil . .Else语句在所有表达式为false或nil时执行。——NeedCopy >

例子:

如果标题[name],则本地下一个(值)索引=#(标题[name])+1个标题[name][下一个(值)索引]=值其他标题[name]={name..:“.value}结束<--需要复制-->

注:

  • 表达式不像在C和Java中那样用括号括起来。
  • 没有等价于C/Java switch语句的语句。必须使用一系列if elseif语句来完成等价的操作。

一边做,一边重复直到

这个虽然重复语句提供由表达式控制的循环。

while expression do语句执行while expression not false或nil end重复语句执行直到expression not false或nil until expression<--需要复制-->

例如,while:

局部a={1,2,3,4}局部和,i=0,1--多重赋值初始化和i,而i<=#a do--检查数组末尾的sum=sum+a[i]--将索引为i的数组元素添加到sum i=i+1--移动到下一个元素末尾<--需要复制-->

重复的例子:

总和,我= 0,1——多个赋值初始化和我重复和=和+[我]——添加与索引数组元素我总和我= + 1,移动到下一个元素,直到我> #——检查是否过去数组的末尾< !——NeedCopy >

当然,也可以写一个不终止的循环,例如,如果在这两个例子中忽略i = i + 1语句。当这样一个函数被执行时,Citrix ADC将检测到该函数没有在合理的时间内完成,并将以运行时错误终止该函数:

已达到Cpu限制。正在[[string“function extension function…”]中终止扩展执行:行号。

将在/var/log/ns.log中报告。

数值为

for循环有两种类型。第一个是数值for,它类似于C和Java中for语句的通常用法。for语句初始化变量,测试变量是否通过了最终值,如果没有,则执行语句块,给变量加1,然后重复。数值for循环的语法是:

对于循环体中的variable = initial, final, increment do语句end 

其中,initial、final和increment都是产生(或可转换为)数字的表达式。变量被认为是for循环语句块的局部变量;它不能在循环之外使用。增量可以省略;默认值为1。表达式在循环开始时计算一次。如果增量为正,终止条件为变量>最终;如果增量为负,终止条件为变量<最终。如果增量为0,循环将立即终止。

示例(相当于前一节中的while和repeat循环):

Sum = 0 for I = 1, #a do - increment默认为1 Sum + a[I] end 

第二种类型的for循环是泛型for,它可以用于更灵活的循环类型。它涉及函数的使用,因此将在介绍函数之后讨论。

打破

break语句在while、repeat或for循环中使用。它将终止循环,并在循环后的第一条语句处恢复执行。示例(也相当于前面的while、repeat和for循环):

sum,i=0,1,如果i>#a则为真,则中断结束sum=sum+a[i]i=i+1结束<--需要复制-->

转到

goto语句可用于向前或向后跳转到标签。标签是一个标识符,语法是::label::。goto语句是goto标签。示例(同样相当于前面的循环):

sum,i=0,1::开始循环::如果i>a,则转到结束循环--向前跳转结束循环sum=sum+a[i]i=i+1转到开始循环--向后跳转::结束循环::…<--需要复制-->

关于在编程中使用gotos的争议由来已久。通常,您应该尝试使用其他控制结构,以使函数更具可读性和可靠性。但是偶尔明智地使用gotos可能会产生更好的程序。特别是,gotos在处理错误时可能很有用。

控制结构