第五十章 Caché 命令大全 ZQUIT(旧版) 命令

第五十章 Caché 命令大全 ZQUIT(旧版) 命令

退出带有错误处理的程序。

重点

  1. ZQUIT只能在编码例程中使用

大纲

ZQ:pc expression

参数

  • pc 可选-后置条件表达式。
  • expression 可选—表达式,其结果为大于0的整数。

描述

Caché平台仅识别ZQUITZQ缩写。

注意:描述了旧版ZQUIT命令。从Caché5.1开始,ZQUIT命令被视为旧命令,不应在新的编程中使用。此处仅出于与旧版应用程序兼容的目的对其进行描述。新程序应将ZTRAP命令与$ZERROR参数一起使用,以在错误处理程序之间传递控制。新过程代码中的ZQUIT命令将导致错误。

ZQUIT命令退出编码例程,并为错误处理提供显式控制。

每次执行DOFORXECUTE命令或调用用户定义的函数时,Caché都会在程序堆栈(有时称为“调用堆栈”)中放置返回信息。 ZQUIT提供了一种机制,嵌套的错误处理例程可以通过该机制将控制权传递给更高级别的错误处理程序。 ZQUIT重新发出错误状态信号,并使Caché解散程序(调用)堆栈。

ZQUITQUIT命令类似,但是它提供了显式控制错误处理。与QUIT命令不同,ZQUIT只能在编码例程中使用。从终端提示输入时,Caché会忽略ZQUIT

ZQUIT有两种形式:

  • 有参数
  • 无参数

ZQUIT无参数

无参数ZQUIT清除整个堆栈。

ZQUIT有参数

ZQ表达式使用$ZTRAP错误处理程序将堆栈展开到另一个调用堆栈级别。 expression的值指定ZQUIT展开的处理程序指定的堆栈级别数。如果使用1作为表达式,Caché会将堆栈展开到第一个遇到的$ZTRAP处理程序。如果使用2作为表达式,Caché会将堆栈展开到遇到的第二个$ZTRAP处理程序,依此类推。

参数

pc

可选的后置条件表达式。如果后置条件表达式为true(计算为非零数值),则Caché执行命令。如果后置条件表达式为假(计算为零),则Caché不执行命令。

expression

任何计算得出的大于0的整数的有效CachéObjectScript表达式。Caché平台使用$ZTRAP的设置将程序堆栈清除回由所得整数指示的设置。

示例

以下是磁带读取例程的示例,该例程将记录读入x,如果读取了磁带标记(“预期”错误),则返回磁带标记标志(tm)为TRUE(1),并允许其调用者的错误陷阱例程,如果有的话,请处理其他任何错误:

Mtread
	SET $ZTRAP="Mterr"
	USE 47
	READ x
	SET tm=0
	QUIT ; Normal return
Mterr
	IF $ZERROR?1"<MAGTAPE>" ; 模式匹配:repcount stringliteral
	{
    
     } ; 自动跳转到错误陷阱处理程序
	ELSE {
    
     
		SET tm=123 
	}
	IF tm=1 {
    
     
		QUIT 
	} ELSE {
    
    
		ZQ 1 
	}
	IF $ZTRAP'="" {
    
    
		GOTO @$ZTRAP
	} ELSE {
    
    ; 调用者的错误例程 
		; 没有呼叫者的错误例程
		USE 0
		WRITE !,$ZERROR ZQ
		QUIT
	}

注意

无参数ZQUIT的行为

如果不指定任何参数,则ZQUIT将展开整个堆栈。在主程序级别继续执行;也就是说,在终端模式或应用程序模式下,作业开始的级别。

ZQUIT不会更改控制流。使用ZQUIT之后的CachéObjectScript命令继续执行。为了模拟M / 11的错误陷阱行为,错误处理例程应以以下命令结尾

  ZQ  QUIT

请注意,ZQ后有两个空格。

如果作业以编程器模式开始,则QUIT命令将返回编程器模式;如果作业以应用程序模式开始,则QUIT命令将退出。要记录应用程序错误,请使用以下命令结束错误陷阱代码:

   ZQ  GOTO ^%ET

同样,请注意ZQ之后的两个空格。

ZQUIT的行为与参数

当使用参数指定时,ZQUIT不会清除整个堆栈,而是将其清除一个或多个级别回到设置$ZTRAP特殊变量的级别。级别数由表达式参数指定,该表达式参数的值必须为大于0的整数。$ZTRAP将错误捕获定向到设置了该例程的例程。

示例

   ZQ 1

将堆栈清除回到设置$ZTRAP的先前级别。向ZQUIT传递参数“ 2”会将堆栈清除回到设置$ZTRAP的倒数第二个级别,依此类推。

Caché在包含当前在$ZTRAP中设置的错误陷阱例程的执行级别上继续执行程序。当该错误陷阱例程退出时,控制权将从设置$ZTRAP的子例程返回到与QUIT相同的位置。

如果Caché在到达指定的$ZTRAP错误处理程序的堆栈级别之前应在堆栈级别找到$ETRAP特殊变量指定的错误处理程序,则Caché将控制权传递给该$ETRAP错误处理程序。如果$ETRAP错误处理程序无法消除该错误,则发出原始ZQUIT$TRAP错误处理程序将再次获得控制权。此时,$ZTRAP错误处理程序可以使用GOTO命令将控制权转移到最初指定的$ZTRAP处理程序。

注意:请勿在具有默认ProcedureBlock属性的过程或对象方法中使用间接GOTO(例如ZQ 1 GOTO @ $ZT)。这将导致编译错误,因为无法使用GOTO退出过程。使用此构造的现有例程不应转换为过程。必须使用ProcedureBlock属性排除使用此构造的对象方法。

可以通过以下任何一种方式使用ZQUIT来更改此错误返回序列:

  • ZQ 1 QUITZQ 1退出)—返回设置先前错误陷阱的子例程的调用者。
  • ZQ 1 GOTO @ $ZT —调用以前的错误陷阱例程。
  • ZQ QUITZQ退出)—暂停应用程序或进入程序模式为空的程序堆栈。请注意ZQUITQUIT之间的两个空格。
  • ZQ GOTO ^ routine —清除程序堆栈,并在指定的顶层例程(通常是函数驱动程序)上恢复执行。请注意ZQUITGOTO之间的两个空格。

猜你喜欢

转载自blog.csdn.net/yaoxin521123/article/details/108092950
今日推荐