退出命令 - Quit

126 阅读2分钟

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

  • QUIT将嵌套的TRY块退出到封闭块,并继续执行CATCH块的其余部分。
ClassMethod quit5()
{
	try {
		w "在TRY块中",!
		s x = 5 / 0
		w "此行不会显示"
	}
	catch exp {
		w "在CATCH块中",!
		w "Error Name: ",exp.Name,!
		try {
			w "在嵌套的TRY块中",!
			q
		}
		catch exp1 {
			w "在嵌套的CATCH块中",!
			w "Error Name: ",exp1.Name,!
		}
		w "QUIT显示此外部CATCH块行",!
	}
	w "结束"
}
  • Terminal下,QUIT n从程序堆栈中清除指定数量的级别。可以使用$STACK特殊变量来确定程序堆栈上的当前级别数。
DHC-APP>n
 
DHC-APP 1S1>n
 
DHC-APP 2N1>n
 
DHC-APP 3N1>q 1
 
DHC-APP 2N1>q 1
 
DHC-APP 1S1>q 1
 
DHC-APP>
  • Terminal下,不带参数的QUIT从程序堆栈中清除所有级别。
DHC-APP>n
 
DHC-APP 1S1>n
 
DHC-APP 2N1>n
 
DHC-APP 3N1>q
 
DHC-APP>
  • 隐式QUIT,当遇到带有参数的标签时,将执行隐式QUIT,与方法类似。
ClassMethod quit6(str)
{
	if (str = "apple") {
		d apple
	} elseif (str = "banana"){
		d banana
	} else {
		d other
	}
	q ""
apple w "apple",!
banana w "banana",!	
other w "other",!
}
ClassMethod quit7(str)
{
	if (str = "apple") {
		d apple
	} elseif (str = "banana"){
		d banana
	} else {
		d other
	}
	q ""
apple() w "apple",!
banana() w "banana",!	
other() w "other",!
}

注意:在每个例程标签的末尾执行一个隐式QUIT,也可以显式指定Quit以提高程序的可读性。

Retrun命令

RETURN:pc expression

Retrun命令用于终止方法的执行。在大多数情况下,与QUIT命令用法相同。在FORDO WHILEWHILE循环命令与TRY-CATCH块中使用时,RETURNQUIT有所不同。

ClassMethod Retrun1()
{
	w "在主程序中",!
	d sub
	w "返回主程序",!
	ret
sub
	w "在sub",!
	for i = 1 : 1 : 5 {
		w i,!
		if i = 3 ret
		w "继续循环",!
	}
	w "在sub始终quit",!
	q
}
  • Retrun在版本2010没有此命令,之后的版本才有。
  • Retrun命令在传统的For循环点语法中与Quit功能一样。
ClassMethod Retrun()
{
	for i = 1 : 1 : 10  d
	.ret:i=1
	.w i,!
	w !,"retrun结束循环",!
	
	for i = 1 : 1 : 10  d
	.quit:i=1
	.w i,!
	w !,"quit结束循环"
	q
}
  • 对比continuequitretrunfor循环中的不同。
    • continue退出本次循环。
    • quit退出循环。
    • retrun退出结束当前运行方法。
ClassMethod Retrun2()
{
	for i = 1 : 1 : 5 {
		w i,!
		continue:(i=3)
		w "继续循环",!
	}
	
	w !,"continue结束循环",!
	
	for i = 1 : 1 : 5 {
		w i,!
		quit:(i=3)
		w "继续循环",!
	}

	w !,"quit结束循环",!
	
	for i = 1 : 1 : 5 {
		w i,!
		ret:(i=3)
		w "继续循环",!
	}
	
	w !,"retrun结束循环",!
}