日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第六十四章 Caché 函数大全 $STACK 函数

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第六十四章 Caché 函数大全 $STACK 函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 第六十四章 Caché 函數大全 $STACK 函數
  • 大綱
    • 參數
  • 描述
    • `$ECODE` 與 `$STACK`
    • `$STACK`的單參數形式
    • `$STACK`的兩個參數形式
  • 示例
  • 注意
    • 跨命名空間的例行調用
    • `$STACK`計算多個參數的命令
    • 出現``錯誤或內存不足的`$STACK`

第六十四章 Caché 函數大全 $STACK 函數

返回有關保存在流程調用堆棧中的活動上下文的信息。

大綱

$STACK(context_level,code_string) $ST(context_level,code_string)

參數

  • context_level 一個整數,指定要為其請求信息的上下文的從零開始的上下文級別編號。支持的值包括0,正整數和-1。
  • code_string 可選-關鍵字字符串,指定所請求的上下文信息的類型。支持的值為“PLACE”,“MCODE”和“ECODE”

描述

$STACK函數根據$ECODE特殊變量的值返回有關當前執行堆棧或當前錯誤堆棧的信息。 $STACK最常用于在當前執行棧(也稱為流程調用棧)上返回信息。

每次例程調用DO命令,XECUTE命令或用戶定義的函數(但不是GOTO命令)時,當前正在執行的例程的上下文都會保存在調用堆棧中,并且在新創建的例程上下文中開始執行稱為例行程序。反過來,被調用的例程可以調用另一個例程,依此類推,導致將更多保存的上下文放置在調用堆棧中。

$STACK函數返回有關保存在流程調用堆棧中的這些活動上下文的信息。 $STACK還可以返回有關當前正在執行的上下文的信息。但是,在錯誤處理期間,$STACK返回當應用程序中發生錯誤時所有可用上下文信息的快照。

可以使用$STACK特殊變量來確定當前上下文級別。

$ECODE 與 $STACK

$STACK返回的值取決于$ECODE特殊變量。如果清除$ECODE(設置為空字符串),則$STACK返回當前執行堆棧。如果$ECODE包含非空值,則$STACK返回當前錯誤堆棧。

僅當$ECODE特殊變量包含非空值時,錯誤堆棧上下文信息才可用。當發生錯誤或將$ECODE顯式設置為非空值時,可能會發生這種情況。在這種情況下,$STACK返回有關錯誤堆棧上下文的信息,而不是有關指定上下文級別的活動堆棧上下文的信息。

當錯誤堆棧上下文信息不可用($ECODE =“”)且使用$STACK的兩個參數形式指定當前上下文級別時,Caché返回有關當前正在執行的命令的信息。為了確保訪問當前執行堆棧時的行為一致,請在調用$STACK之前指定SET $ECODE =“”。

$STACK的單參數形式

$STACK(context_level)返回一個字符串,該字符串指示如何建立指定的上下文級別。下表描述了可以返回的字符串值:

  • DO 通過DO命令建立指定的上下文時返回。
  • XECUTE 通過XECUTE命令或BREAK命令建立指定的上下文時返回。
  • $$ 通過用戶定義的函數引用建立指定的上下文時返回。
  • An ECODE string 導致將指定上下文添加到錯誤堆棧的錯誤的錯誤代碼值。例如,, M26。當在已經發生錯誤的上下文級別上發生錯誤時,上下文信息將放在下一個更高的錯誤堆棧級別;僅當指定的錯誤堆棧上下文級別的上下文信息已重定位信息時,才返回它。

當指定的上下文級別為零(0)或未定義時,$STACK返回空字符串。

還可以使用$STACK函數的單參數形式為上下文級別指定-1。在這種情況下,$STACK返回可用信息的最大上下文級別,該信息在正常處理期間是當前正在執行的上下文的上下文級別編號。但是,在錯誤處理期間,$STACK(-1)返回較大值:

  • 過程錯誤堆棧的最大上下文級別
  • 當前執行上下文的上下文級別號

$STACK的兩個參數形式

$STACK(context_level,code_string))根據指定的code_string返回有關指定上下文級別的信息。必須將code_string指定為帶引號的字符串。 code_string值不區分大小寫。例如,$STACK(1,"PLACE")或 $STACK(1,"place")。

以下描述了代碼字符串以及在指定每個字符串時返回的信息。

  • PLACE —返回在指定上下文級別執行的最后一個命令的條目引用和命令編號。對于DO和用戶定義的函數上下文,將以以下格式返回該值:“ label [+ offset] [^例程名稱] + command”。對于XECUTE上下文,使用以下格式:“ @ + command”。
  • MCODE —返回源例程行,XECUTE字符串或$ETRAP字符串,其中包含在指定上下文級別執行的最后一個命令。 (常規行的返回方式與$TEXT函數返回的方式相同。)

注意:在錯誤處理期間,如果在構建或更新錯誤堆棧時內存不足,則可能沒有足夠的內存來存儲源代碼行。在這種情況下,MCODE代碼字符串的返回值為空字符串。但是,PLACE代碼字符串的返回值指示位置。

  • ECODE —在指定上下文級別發生的任何錯誤的錯誤代碼(僅在錯誤堆棧上下文中可用)。

當請求的信息在指定的上下文級別不可用時,$STACK的兩個參數形式將返回空字符串。

示例

下面的示例演示$STACK可以返回的一些信息:

STAC ;SET $ECODE=""XECUTE "DO First"QUIT First SET varSecond=$$Second()QUIT Second() FOR loop=0:1:$STACK(-1) { WRITE !,"Context level:",loop,?25,"Context type: ",$STACK(loop)WRITE !,?5,"Current place: ",$STACK(loop,"PLACE")WRITE !,?5,"Current source: ",$STACK(loop,"MCODE")WRITE ! }QUIT 1 DHC-APP>d STAC^PHA.TEST.CommandContext level:0 Context type:Current place: @ +1Current source: D STAC^PHA.TEST.CommandContext level:1 Context type: DOCurrent place: STAC+2^PHA.TEST.Command +1Current source: XECUTE "DO First"Context level:2 Context type: XECUTECurrent place: @ +1Current source: DO FirstContext level:3 Context type: DOCurrent place: First+1^PHA.TEST.Command +1Current source: SET varSecond=$$Second()Context level:4 Context type: $$Current place: Second+3^PHA.TEST.Command +4Current source: WRITE !,?5,"Current source: ",$STACK(loop,"MCODE")

打印堆棧信息

FOR loop=0:1:$STACK(-1) { WRITE !,"Context level:",loop,?25,"Context type: ",$STACK(loop)WRITE !,?5,"Current place: ",$STACK(loop,"PLACE")WRITE !,?5,"Current source: ",$STACK(loop,"MCODE")WRITE ! }

注意

跨命名空間的例行調用

如果例程在其他名稱空間中調用例程,則$STACK返回名稱空間名稱作為例程名稱的一部分。例如,如果USER名稱空間中的例程調用SAMPLES名稱空間中的例程,則$STACK返回 ^|“ SAMPLES” |例程名稱。

$STACK使用尖號(^)字符作為分隔符。因此,如果隱含的名稱空間名稱包含插入符號(^)字符,則Caché將此名稱空間名稱字符顯示為@字符。

$STACK計算多個參數的命令

指定多參數命令時,命令計數包括命令關鍵字和除第一個以外的所有命令參數。考慮以下多參數命令:

TESTSET X=1,Y=Z

在Caché中,由于Y = Z參數被視為單獨的命令,因此$STACK語句$STACK(1,“ PLACE”)返回"TEST^TEST +2"。

出現<STORE>錯誤或內存不足的$STACK

在出現<STORE>錯誤或在內存不足的情況下,可能無法通過應用$STACK的兩個參數形式正常獲取信息。

總結

以上是生活随笔為你收集整理的第六十四章 Caché 函数大全 $STACK 函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。