久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

ABAP關鍵字IS BOUND, IS NOT INITIAL和IS ASSIGNED怎么使用

206次閱讀
沒有評論

共計 2036 個字符,預計需要花費 6 分鐘才能閱讀完成。

行業資訊    
服務器    
ABAP 關鍵字 IS BOUND, IS NOT INITIAL 和 IS ASSIGNED 怎么使用

本篇內容主要講解“ABAP 關鍵字 IS BOUND, IS NOT INITIAL 和 IS ASSIGNED 怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“ABAP 關鍵字 IS BOUND, IS NOT INITIAL 和 IS ASSIGNED 怎么使用”吧!

ABAP 里的 IS BOUND, IS NOT INITIAL 和 IS ASSIGNED 這組關鍵字,如果平時不留心,很容易理解地似是而非。今天我們就來說一說它們的區別。

先把 SAP 幫助文檔抄過來:

IS BOUND

It checks whether a reference variable contains a valid reference. A data reference variable that contains a stack reference, on the other hand, can become invalid even if the reference data object is removed from the stack.

IS INITIAL
checks whether the operand operand is initial. The expression is true, if the operand contains its type-friendly initial value.

IS ASSIGNED
checks whether a memory area is assigned to a field symbol. The expression is true if the field symbol points to a memory area.

簡單翻譯成中文:

IS BOUND:用于檢查一個引用變量是否指向了一個有效的引用。幫助文檔特意提到,如果一個引用指向的是一個棧上申請的變量,那么這個變量會隨棧的銷毀而被銷毀,因此指向其的引用不再有效。

IS INITIAL: 用于檢查一個變量的值是否為其數據類型對應的初始值。

比如我定義一個引用變量但不對其賦值,則 IS INITIAL 判斷一定為 abap_true.

IS ASSIGNED: 對于檢測的 field symbol,該關鍵字判斷該 field symbol 是否分配有內存區域。

這三個關鍵字交織在一起,就形成了一些有趣的排列組合。

比如,是否存在 NOT INITIAL, 但同時也 NOT BOUND 的變量?是否存在同時滿足 IS INITIAL, NOT BOUND 和 IS ASSIGNED 的 field symbol? 下面我們用一個簡單的 ABAP 報表來研究這些排列組合。

完整的測試代碼:

同時滿足 NOT INITIAL 和 NOT BOUND 的引用變量

下圖 main 方法里,第 15 行在棧上定義了一個整型變量 number,將其引用賦給類的成員變量 dref. 待 main 方法執行之后,number 所生存的棧幀被銷毀,因此 dref 指向的引用不再有效,調試器里顯示為:FREED STACK.

現在 dref 并不是未指向任何引用,而是指向一個無效的引用,因此 dref 同時滿足 IS NOT INITIAL 和 IS NOT BOUND.

IS ASSIGNED

一個 field symbol 定義之后,如果不為其分配內存區域,則 IS ASSIGNED 返回 abap_false.

下面的代碼,如果注釋掉第 27 行的 IF 條件:

運行時會拋出 GETWA_NOT_ASSIGNED 錯誤:Field symbol has not yet been assigned.

也就是說,無論是讀取 field symbol 具體的內容,還是檢測其內容是否為初始值,為了避免 GETWA_NOT_ASSIGNED 錯誤,我們必須在 IS INITIAL 判斷之前,使用 IS ASSIGNED 判斷 field symbol 是否被分配了內存區域。

是否存在一個 NOT BOUND, IS INITIAL 但是卻 IS ASSIGNED 的 field symbol?

答案是肯定的。

上面代碼第 37 行定義的名為 any2 的 field symbol,在第 45 行的 CLEAR 操作完成之后,就同時滿足這三個條件。這個 field symbol 被分配的內存區域,內容并不是整型數本身,而是一個指向整型變量的引用。

該報表打印輸出如下:

第 40 行代碼通過 ASSIGN 分配給 any2 的內存區域并未通過 UNASSIGN 釋放,因此 any2 IS ASSIGNED 始終返回 abap_true. 另一方面,這塊內存區域雖然還未釋放,但里面存放的引用變量已經不再指向任何一個有效的變量了,因此 IS BOUND 返回 abap_false. 最后,因為 any2 施加了 CLEAR 操作, 又回到了初始化狀態,所以 IS INITIAL 返回 abap_true.

到此,相信大家對“ABAP 關鍵字 IS BOUND, IS NOT INITIAL 和 IS ASSIGNED 怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計2036字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 水城县| 定襄县| 柳林县| 新乡市| 新绛县| 东乡县| 潜江市| 上栗县| 都匀市| 新安县| 沈丘县| 河津市| 牟定县| 双鸭山市| 井陉县| 庄浪县| 海盐县| 岳普湖县| 天门市| 韩城市| 中阳县| 高淳县| 桑植县| 泸西县| 静安区| 郑州市| 陆丰市| 华宁县| 班玛县| 汽车| 伊宁市| 台东县| 辉县市| 沭阳县| 扎鲁特旗| 和林格尔县| 江陵县| 漠河县| 玛多县| 长兴县| 林周县|