示例注意
`$estack`和錯誤處理
包含從使用者定義的點儲存在呼叫堆疊上的上下文幀的數量。
$estack
$es
$estack
包含從使用者定義的點為job
儲存在呼叫堆疊上的上下文幀的數量。可以通過使用new
命令建立$estack
的新副本來指定這一點。
$estack
特殊變數類似於$stack
特殊變數。兩者都包含當前儲存在job
或程式的呼叫堆疊中的上下文框架的數量。更改上下文時,caché會遞增並恢復兩者。主要區別在於,可以隨時使用new
命令將$estack
計數重置為零。無法重置$stack
計數。
啟動caché映像時,在將任何上下文儲存到呼叫堆疊之前,$estack
和$stack
的值均為零。每次例程使用do
呼叫另乙個例程時,系統都會將當前正在執行的例程的上下文儲存在呼叫堆疊中,遞增$estack
和$stack
,並在新建立的上下文中開始執行被呼叫例程。被呼叫的例程可以依次呼叫另乙個例程,依此類推。每次呼叫另乙個例程時,caché都會遞增$estack
和$stack
並將更多儲存的上下文放在呼叫堆疊中。
發出do
命令,execute
命令或對使用者定義函式的呼叫會建立新的執行上下文。不會發出goto
命令。
當do
命令,xecute
命令或使用者定義的函式引用建立新上下文時,caché將增加$stack
和$estack
的值。當quit
命令導致上下文退出時,caché從呼叫堆疊中恢復以前的上下文,並減小$stack
和$estack
的值。
不能使用set
命令修改$estack
和$stack
特殊變數。嘗試這樣做會導致錯誤。
可以使用new
命令在任何上下文中建立$estack的新副本。 caché採取以下行動:
這樣,可以將特定上下文建立為$estack
級別0上下文。當使用do
,xecute
或使用者定義的函式建立新的上下文時,caché會將此$estack
值遞增。但是,當退出建立新$estack
的上下文時($estack
處於級別0),caché會還原$estack
的先前副本的值。
以下示例顯示了$estack
上的new命令的作用。在此的示例mainroutine
顯示$stack
和$estack
的初始值(它們是相同的值)。然後,它呼叫sub1。該呼叫將增加$stack
和$estack
。new
命令建立乙個值為0的$estack
。sub1
呼叫sub2
,遞增$stack
和$estack
。返回mainroutine
將恢復$stack
和$estack
的初始值:
/// d ##class(pha.test.specialvariables).estack()
classmethod estack()
(pha.test.specialvariables)
.estack()
initial: $stack=
1 $estack=
1sub1call: $stack=
2 $estack=
2sub1new: $stack=
2 $estack=
0sub2call: $stack=
3 $estack=
1return: $stack=
1 $estack=
1下面的示例演示了如何通過發出do
和xecute
命令在建立新上下文時增加$estack
的值,並在退出這些上下文時減小其值。它還顯示goto
命令不會建立新上下文或增加$estack
:
/// d ##class(pha.test.specialvariables).estack1()
classmethod estack1()
(pha.test.specialvariables)
.estack1()
initial main: $estack=
0sub1 via do: $estack=
1sub1 xecute: $estack=
2sub1 post-xecute: $estack=
1sub2 via goto: $estack=
1sub1 after goto: $estack=
1return main: $estack=
0從程式呼叫的例程與在終端提示下使用do
命令呼叫的例程在不同的上下文級別開始。在終端提示下輸入do
命令時,系統會為該例程建立乙個新的上下文。
呼叫的例程可以通過建立$estack level 0
上下文進行補償,然後對所有上下文級引用使用$estack
。
請考慮以下例程:
/// d ##class(pha.test.specialvariables).estack2()
classmethod estack2()
從程式執行start
時,會看到以下顯示:
$stack level in routine start is 0
$estack level in routine start is 0
當在終端提示符下發出do^start
命令來執行start
時,會看到以下顯示:
(pha.test.specialvariables)
.estack2()
$stack level in routine start is 1
$estack level in routine start is 0
當錯誤處理程式必須將呼叫堆疊展開到特定上下文級別時,$estack
在錯誤處理期間特別有用。
第三十二章 Cach 變數大全 ZJOB 變數
包含job狀態資訊。zjob zj zjob包含乙個數字,其中每個位代表作業狀態的乙個特定方面。zjob返回乙個整數,該整數由設定的狀態位的總和組成。例如,如果 zjob 5,則表示設定了1位和4位。要測試單個 zjob位設定,可以使用整數除 和模 運算子。例如,zjob x 2,其中x是位號。下表...
第二章 Cach 變數大全 ECODE 變數
包含當前錯誤 字串。ecode ec發生錯誤時,cach 會將 ecode特殊變數設定為逗號分隔的字串,其中包含與錯誤相對應的錯誤 例如,當引用未定義的全域性變數時,cach 將 ecode特殊變數設定為以下字串 m7,ecode可以包含iso 11756 1999標準m錯誤 格式為m 其中 是整數...
第五章 Cach 變數大全 HALT 變數
示例 包含暫停陷阱例程呼叫。halt halt包含當前暫停陷阱例程的名稱。當遇到halt命令時,應用程式將呼叫暫停陷阱例程。該暫停陷阱例程可以在發出halt命令之前執行清理或日誌記錄處理,或者可以替代其他處理而不是暫停程式執行。可以使用set命令將 halt設定為暫停陷阱例程。暫停陷阱例程由帶引號的...