- Euphoria 教程
- Euphoria - 首页
- Euphoria - 概述
- Euphoria - 环境
- Euphoria - 基本语法
- Euphoria - 变量
- Euphoria - 常量
- Euphoria - 数据类型
- Euphoria - 运算符
- Euphoria - 分支
- Euphoria - 循环类型
- Euphoria - 流程控制
- Euphoria - 短路
- Euphoria - 序列
- Euphoria - 日期和时间
- Euphoria - 过程
- Euphoria - 函数
- Euphoria - 文件 I/O
- Euphoria 有用资源
- Euphoria - 快速指南
- Euphoria - 库例程
- Euphoria - 有用资源
- Euphoria - 讨论
Euphoria - 流程控制
程序执行流程指的是程序语句执行的顺序。默认情况下,语句一个接一个地执行。
但是,很多时候需要更改执行顺序以完成任务。
Euphoria 有许多流程控制语句,您可以使用它们来安排语句的执行顺序。
exit 语句
退出循环使用关键字exit完成。这会导致流程立即离开当前循环,并在循环结束后的第一个语句处重新开始。
语法
exit 语句的语法如下:
exit [ "Label Name" ] [Number]
exit 语句终止最新和最内层的循环,直到指定可选的标签名称或编号。
exit N的一种特殊形式是exit 0。这将离开所有级别的循环,无论深度如何。控制在最外层循环块之后继续。同样,exit -1 退出第二外层循环,依此类推。
示例
#!/home/euphoria-4.0b2/bin/eui integer b for a = 1 to 16 do printf(1, "value of a %d\n", a) if a = 10 then b = a exit end if end for printf(1, "value of b %d\n", b)
这将产生以下结果:
value of a 1 value of a 2 value of a 3 value of a 4 value of a 5 value of a 6 value of a 7 value of a 8 value of a 9 value of a 10 value of b 10
break 语句
break 语句的工作原理与exit 语句完全相同,但适用于 if 语句或 switch 语句,而不是任何类型的循环语句。
语法
break 语句的语法如下:
break [ "Label Name" ] [Number]
break 语句终止最新和最内层的 if 或 switch 块,直到指定可选的标签名称或编号。
break N的一种特殊形式是break 0。这将离开最外层的 if 或 switch 块,无论深度如何。控制在最外层块之后继续。同样,break -1 中断第二外层的 if 或 switch 块,依此类推。
示例
#!/home/euphoria-4.0b2/bin/eui integer a, b sequence s = {'E','u', 'p'} if s[1] = 'E' then a = 3 if s[2] = 'u' then b = 1 if s[3] = 'p' then break 0 -- leave topmost if block end if a = 2 else b = 4 end if else a = 0 b = 0 end if printf(1, "value of a %d\n", a) printf(1, "value of b %d\n", b)
这将产生以下结果:
value of a 3 value of b 1
continue 语句
continue 语句通过转到下一次迭代并跳过其余迭代来继续执行其所应用的循环。
转到下一次迭代意味着测试条件变量索引并检查它是否仍在范围内。
语法
continue 语句的语法如下:
continue [ "Label Name" ] [Number]
continue 语句将重新迭代最新和最内层的循环,直到指定可选的标签名称或编号。
continue N的一种特殊形式是continue 0。这将重新迭代最外层循环,无论深度如何。同样,continue -1 从第二外层循环开始,依此类推。
示例
#!/home/euphoria-4.0b2/bin/eui for a = 3 to 6 do printf(1, "value of a %d\n", a) if a = 4 then puts(1,"(2)\n") continue end if printf(1, "value of a %d\n", a*a) end for This would produce following result: value of a 3 value of a 9 value of a 4 (2) value of a 5 value of a 25 value of a 6 value of a 36
retry 语句
retry 语句通过转到下一次迭代并跳过其余迭代来继续执行其所应用的循环。
语法
retry 语句的语法如下:
retry [ "Label Name" ] [Number]
retry 语句重试执行其所应用的循环的当前迭代。该语句分支到指定循环的第一个语句,既不测试任何内容也不增加 for 循环索引。
retry N的一种特殊形式是retry 0。这将重试执行最外层循环,无论深度如何。同样,retry -1 重试第二外层循环,依此类推。
通常,包含 retry 语句的子块还包含另一个流程控制关键字,如 exit、continue 或 break。否则,迭代将无限执行。
示例
#!/home/euphoria-4.0b2/bin/eui integer errors = 0 integer files_to_open = 10 for i = 1 to length(files_to_open) do fh = open(files_to_open[i], "rb") if fh = -1 then if errors > 5 then exit else errors += 1 retry end if end if file_handles[i] = fh end for
由于 retry 不会更改 i 的值并尝试再次打开相同的文件,因此必须有一种方法可以从循环中退出,exit 语句提供了这种方法。
goto 语句
goto 语句指示计算机在带标签的位置恢复代码执行。
恢复执行的位置称为语句的目标。它仅限于位于当前例程中,或者如果位于任何例程之外,则位于当前文件中。
语法
goto 语句的语法如下:
goto "Label Name"
goto 语句的目标可以是任何可访问的label 语句:
label "Label Name"
标签名称必须是双引号括起来的常量字符串。Euphoria 标识符中非法的字符可能会出现在标签名称中,因为它是一个常规字符串。
示例
#!/home/euphoria-4.0b2/bin/eui integer a = 0 label "FIRST" printf(1, "value of a %d\n", a) a += 10 if a < 50 then goto "FIRST" end if printf(1, "Final value of a %d\n", a)
这将产生以下结果:
value of a 0 value of a 10 value of a 20 value of a 30 value of a 40 Final value of a 50