第五十章 Caché 命令大全 ZQUIT(旧版) 命令
退出带有错误处理的程序。
重点
-
ZQUIT
只能在编码例程中使用
大纲
ZQ:pc expression
参数
- pc 可选-后置条件表达式。
- expression 可选—表达式,其结果为大于0的整数。
描述
Caché平台仅识别ZQUIT
的ZQ
缩写。
注意:描述了旧版ZQUIT
命令。从Caché5.1开始,ZQUIT命令被视为旧命令,不应在新的编程中使用。此处仅出于与旧版应用程序兼容的目的对其进行描述。新程序应将ZTRAP
命令与$ZERROR
参数一起使用,以在错误处理程序之间传递控制。新过程代码中的ZQUIT
命令将导致错误。
ZQUIT
命令退出编码例程,并为错误处理提供显式控制。
每次执行DO
,FOR
或XECUTE
命令或调用用户定义的函数时,Caché都会在程序堆栈(有时称为“调用堆栈”)中放置返回信息。 ZQUIT
提供了一种机制,嵌套的错误处理例程可以通过该机制将控制权传递给更高级别的错误处理程序。 ZQUIT
重新发出错误状态信号,并使Caché解散程序(调用)堆栈。
ZQUIT
与QUIT
命令类似,但是它提供了显式控制错误处理。与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属性的过程或对象方法中使用间接GOT
O(例如ZQ 1 GOTO @ $ZT
)。这将导致编译错误,因为无法使用GOTO
退出过程。使用此构造的现有例程不应转换为过程。必须使用ProcedureBlock属性排除使用此构造的对象方法。
可以通过以下任何一种方式使用ZQUIT
来更改此错误返回序列:
-
ZQ 1 QUIT
(ZQ 1
退出)—返回设置先前错误陷阱的子例程的调用者。 -
ZQ 1 GOTO @ $ZT
—调用以前的错误陷阱例程。 -
ZQ QUIT
(ZQ
退出)—暂停应用程序或进入程序模式为空的程序堆栈。请注意ZQUIT
和QUIT
之间的两个空格。 -
ZQ GOTO ^ routine
—清除程序堆栈,并在指定的顶层例程(通常是函数驱动程序)上恢复执行。请注意ZQUIT
和GOTO
之间的两个空格。
网友评论