日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析

發(fā)布時間:2023/12/19 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

先把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: 用于檢查一個變量的值是否為其數(shù)據(jù)類型對應的初始值。

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

IS ASSIGNED: 對于檢測的field symbol,該關鍵字判斷該field symbol是否分配有內(nèi)存區(qū)域。

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

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

完整的測試代碼:

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

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

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

IS ASSIGNED

一個field symbol定義之后,如果不為其分配內(nèi)存區(qū)域,則IS ASSIGNED返回abap_false.

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

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

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

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

答案是肯定的。

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

該報表打印輸出如下:

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

一句話總結(jié),就是:判斷引用變量是否有效,用IS BOUND; 判斷變量是否處于初始狀態(tài),用IS INITIAL; 判斷field symbol是否分配有內(nèi)存區(qū)域,用IS ASSIGNED. 在對field symbol進行各種操作之前,先調(diào)用IS ASSIGNED進行判斷,以避免GETWA_NOT_ASSIGNED錯誤。

感謝閱讀。

ABAP專題

  • Jerry的ABAP, Java和JavaScript亂燉

  • ABAP開發(fā)人員未來應該學些什么

  • Jerry 2017年的五一小長假:8種經(jīng)典排序算法的ABAP實現(xiàn)

  • Jerry的ABAP原創(chuàng)技術文章合集

  • 300行ABAP代碼實現(xiàn)一個最簡單的區(qū)塊鏈原型

  • 使用Java+SAP云平臺+SAP Cloud Connector調(diào)用ABAP On-Premise系統(tǒng)里的函數(shù)

  • 在SAP云平臺的CloudFoundry環(huán)境下消費ABAP On-Premise OData服務

  • ABAP vs Java, 蛙泳 vs 自由泳

  • 聊聊C語言和ABAP

  • 動手使用ABAP Channel開發(fā)一些小工具,提升日常工作效率

  • 我用ABAP做過的那些無聊的事情

  • 不喜歡SAP GUI?那試試用Eclipse進行ABAP開發(fā)吧

  • 使用Visual Studio Code編寫和激活ABAP代碼

  • 你的ABAP程序給佛祖開過光么?來試試Jerry這個小技巧

  • 在SAP云平臺ABAP編程環(huán)境上編寫第一段ABAP程序

  • SAP官方發(fā)布的ABAP編程規(guī)范

  • ABAP Code Inspector那些隱藏的功能,您都知道嗎?

  • 還在用ABAP進行SAP產(chǎn)品的二次開發(fā)?來了解下這種全新的二次開發(fā)理念吧

  • ABAP Netweaver體內(nèi)的那些寄生式編程語言

  • 從SAP社區(qū)上的一篇博客開始,聊聊SAP產(chǎn)品命名背后的那份情懷

  • 云端的ABAP Restful服務開發(fā)

  • 如何在SAP云平臺ABAP編程環(huán)境里把CDS view暴露成OData服務

  • 使用abapGit在ABAP On-Premises系統(tǒng)和SAP云平臺ABAP環(huán)境之間進行代碼傳輸

  • 30分鐘用Restful ABAP Programming模型開發(fā)一個支持增刪改查的Fiori應用

  • Jerry帶您了解Restful ABAP Programming模型系列之二:Action和Validation的實現(xiàn)

  • Jerry帶您了解Restful ABAP Programming模型系列之三:云端ABAP應用調(diào)試

  • SAP云平臺上的ABAP編程環(huán)境里如何消費第三方服務

  • ABAP開發(fā)者上云的時候到了 - 現(xiàn)在大家可以免費使用SAP云平臺ABAP環(huán)境的試用版了

  • 學而不思則罔 - SAP云平臺ABAP編程環(huán)境的由來和適用場景

  • SAP云平臺里的三叉戟應用

  • 如何基于Restful ABAP Programming模型開發(fā)并部署一個支持增刪改查的Fiori應用

  • SAP 2019 TechEd Key Note解讀:云時代下SAP從業(yè)人員如何做二次開發(fā)?

  • 有哪些ABAP關鍵字和語法,到了ABAP云環(huán)境上就沒辦法用了?

  • ABAP開發(fā)環(huán)境終于支持以駝峰命名法自動格式化ABAP變量名了

  • 利用ABAP 740的新關鍵字REDUCE完成一個實際工作任務

  • 一段讓人瑟瑟發(fā)抖的ABAP代碼

  • 昨日萬圣節(jié)ABAP怪獸級代碼謎團,公布答案啦

  • 介紹一種在ABAP內(nèi)核態(tài)進行內(nèi)表高效拷貝的方法

  • 使用SAP Cloud Application Programming模型開發(fā)OData的一個實際例子

  • 當ABAP遇見普羅米修斯

  • 使用ABAP繪制可伸縮矢量圖

  • ABAP開發(fā)環(huán)境語法高亮的那些事兒

  • SAP錯誤消息調(diào)試之七種武器:讓所有的錯誤消息都能被定位

  • 使用ABAP操作Excel的幾種方法

  • SAP GUI里的收藏夾事務碼管理工具

  • SAP GUI和Windows注冊表

  • 有了Debug權(quán)限就能干壞事?小心了,你的一舉一動盡在系統(tǒng)監(jiān)控中

  • ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX這些東東是什么鬼

  • 實現(xiàn)ABAP條件斷點的三種方式

  • 使用SAT跟蹤監(jiān)控從瀏覽器打開的SAP應用的性能和調(diào)用棧

  • 一個13年ABAP老兵的建議:了解這些基礎知識,對ABAP開發(fā)有百利而無一害

  • SAP ABAP Netweaver容器化, 不可能完成的任務嗎?

  • SAP產(chǎn)品增強技術回顧

  • SAP API開發(fā)方法大全

  • 淺談Java和SAP ABAP的靜態(tài)代理和動態(tài)代理,以及ABAP面向切面編程的嘗試

  • SAP ABAP應用服務器的HTTP響應狀態(tài)碼(Status Code)

  • SAP ABAP里存在Java List這種集合工具類么?CL_OBJECT_COLLECTION了解一下

  • ABAP面試題系列:寫一組會出現(xiàn)死鎖(Deadlock)的ABAP程序

  • SAP ABAP Netweaver服務器的標準登錄方式講解

  • SAP ABAP關鍵字語法圖和ABAP代碼自動生成工具Code Composer

  • SAP ABAP SM50的另類用途 - ABAP工作進程對數(shù)據(jù)庫表讀取操作的檢測

  • 關于SAP ABAP字符變量和字符串變量字符個數(shù)的一個知識點,和一個血案

要獲取更多Jerry的原創(chuàng)文章,請關注公眾號"汪子熙":

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。