退出命令 - Continue

99 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第42天,点击查看活动详情

20讲 命令 - 退出命令

Continue命令

CONTINUE:pc
  • Continue命令在ForWhileDo While循环命令之后的代码块内使用。Continue作用是跳过循环体中剩余的语句并到循环末尾而强行执行下一次循环。
  • Continue命令只在块级语法有效。
ClassMethod Continue4()
{
	for i = 1 : 1 : 10  d
	.continue:i=1
	.w i,!
	w !,"结束循环"
	q
}
  • Continue与后置条件表达式一起使用。
ClassMethod Continue()
{
	for i = 1 : 1 : 10 {
		if i < 6 { 
			continue:(i # 2)
			w i,!
		} else { 
			w i,!
		}
	}
	w !,"For结束循环",!
	
	s i = 0
	while (i < 10) {
		s i = i + 1
		if i < 6 { 
			continue:(i # 2)
			w i,!
		} else { 
			w i,!
		}
	}
	w !,"while结束循环",!
	
	s i = 0
	do {
		s i = i + 1
		if i < 6 { 
			continue:(i # 2)
			w i,!
		} else { 
			w i,!
		}
	} while (i < 10)
	
	w !,"do while结束循环",!
	
	q
}
  • Continue不接受任何参数,不带参数的Continue
ClassMethod Continue1()
{
	for i = 1 : 1 : 3 {
		w !, "外部循环: i=", i
		for j = 1 : 1 : 5 {
			if j '= 3 {
				continue  
			} else { 
				w !, " 输出3"
			}
			w !, "内部循环: j=", j
		}
		w !, "回到外部循环"
	}
	q
}
  • Continue跳出TryCatch块以返回其控制流语句。
ClassMethod Continue2()
{
	for i = 1 : 1 : 10 {
		w !, "For循环的顶部",i
		try {
			if i = 4 {
				w " i = 4" 
			} else { 
				continue 
			}
			w !, "在TRY块中: i=", i
		}
		catch exp {
			w !, "Catch块异常处理程序",!
			w "错误代码=", exp.Code
			ret
		}
		w !,"FOR循环的底部",i
	}
	q
}

Quit命令

QUIT:pc expression
Q:pc expression

QUIT n
Q n
  • QUIT 命令终止当前上下文的执行,退出到封闭的上下文。在方法中调用时,Quit将返回调用方法,如果没有调用方法,则终止该程序。当从FORDO WHILEWHILE循环命令、TRY - CATCH块或传统DO结构(点语法)内调用时,QUIT会退出该结构并继续执行该结构之外的下一个命令。
ClassMethod quit()
{
	w "在主程序中",!
	d sub
	w "返回主程序",!
	q
sub
	w "在sub",!
	for i = 1 : 1 : 5 {
		w i,!
		if i = 3 q
		w "继续循环",!
	}
	w "在sub始终quit",!
	q
}
  • quit在传统DO结构内调用时,for循环点语法与块语法quit相当于continue命令。
ClassMethod quit1()
{
	for i = 1 : 1 : 10  d
	.q:i#2
	.w i,!
	
	w !,"点语法for结构结束循环"
	
	for i = 1 : 1 : 10 {
		continue:i#2
		w i,!
	}
	w !,"块语法for结构结束循环"
	
	q
}

注意:QUIT可用于退出旧语法的DO结构(无参数DO,后跟代码行,每行代码前加一个句点)。使用无参数DO结构代码块后面的命令继续执行。这种无参数的DO语法被认为已过时,不应用于新的编码。

  • 如果IF代码块未嵌套在循环结构内,则QUIT终止当前程序。
  • 带参数的QUIT不能用于从FORDO WHILEWHILE命令循环中退出。带参数的QUIT也不能用于从TRY块或CATCH块中退出。
ClassMethod quit3()
{
	s ret = ..quit4(5)
	q ret
}


ClassMethod quit4(x)
{
	q x * x
}