第三章 Cach 變數大全 ESTACK 變數

2021-10-14 18:37:51 字數 3509 閱讀 7905

示例注意

`$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上下文。當使用doxecute或使用者定義的函式建立新的上下文時,caché會將此$estack值遞增。但是,當退出建立新$estack的上下文時($estack處於級別0),caché會還原$estack的先前副本的值。

以下示例顯示了$estack上的new命令的作用。在此的示例mainroutine顯示$stack$estack的初始值(它們是相同的值)。然後,它呼叫sub1。該呼叫將增加$stack$estacknew命令建立乙個值為0的$estacksub1呼叫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下面的示例演示了如何通過發出doxecute命令在建立新上下文時增加$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設定為暫停陷阱例程。暫停陷阱例程由帶引號的...