退出命令 - Quti 与 Return 的区别

475 阅读2分钟

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

  • 对比for循环传统点语法与块语法使用retquit的优势。
    • 块语法ret可直接退出返回值。
    • 点语法则需要用循环外变量去接收,在去判断返回值。
ClassMethod Retrun3(x)
{
	for i = 1 : 1 : 5 {
		w i,!
		ret:..Retrun4(x) "程序报错!"
	}
	ret "结束"
}

ClassMethod Retrun5(x) As %Boolean
{
	s err = 0
	for i = 1 : 1 : 5 q:err  d
	.w i,!
	.s err = ..Retrun4(x)
	
	q:err "程序报错!"
	q "结束"
}

ClassMethod Retrun4(x) As %Boolean
{
	q x
}
  • retrun退出嵌套的TRY块和所有封闭的块,
ClassMethod Retrun6()
{
	try {
		w "在TRY块中",!
		s x = 5 / 0
		w "此行不会显示"
	}
	catch exp {
		w "在CATCH块中",!
		w "Error Name: ",exp.Name,!
		try {
			w "在嵌套的TRY块中",!
			ret
		}
		catch exp1 {
			w "在嵌套的CATCH块中",!
			w "Error Name: ",exp1.Name,!
		}
		w "QUIT显示此外部CATCH块行",!
	}
	w "结束"
}
  • Terminal下,retrun n从程序堆栈中清除指定数量的级别。可以使用$STACK特殊变量来确定程序堆栈上的当前级别数。
DHC-APP>n
 
DHC-APP 1S1>n
 
DHC-APP 2N1>n
 
DHC-APP 3N1>ret 1
 
DHC-APP 2N1>ret 1
 
DHC-APP 1S1>ret 1
 
DHC-APP>
  • Terminal下,不带参数的retrun从程序堆栈中清除所有级别。
DHC-APP>n
 
DHC-APP 1S1>n
 
DHC-APP 2N1>n
 
DHC-APP 3N1>ret
 
DHC-APP>
  • QUITRETURN命令都终止代码块或方法的执行。在没有参数的情况下,它们只需退出从中调用它们的代码。有参数情况下,它们将参数用作返回值。退出当前上下文,退出到封闭上下文。Return将当前程序退出到程序被调用的位置。
位置QUITRETURN
方法或例程代码(非块结构)退出方法或例程,返回到调用方法或例程。退出方法或例程,返回到调用方法或例程。
TryCatchTry/Catch块结构对退出到方法或例程中的下一个代码。如果从嵌套的TRYCATCH块发出,则从一级退出到封闭的TRYCATCH块。退出方法或例程,返回到调用方法或例程。
DOXECUTE退出方法或例程,返回到调用方法或例程。退出方法或例程,返回到调用方法或例程。
IF退出方法或例程,返回到调用方法或例程。但是,如果嵌套在ForWhileDo While循环中,则退出块结构并继续代码块后下一行。退出方法或例程,返回到调用方法或例程。
FOR, WHILE, DO WHILE退出块结构并继续代码块之后的下一行。如果从嵌套块发出,则从上级退出到封闭块。退出方法或例程,返回到调用方法或例程。