SAP 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.

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

IS ASSIGNED: 关于检测的field symbol,该关键字判别该field symbol是否分配有内存区域

这三个关键字交错在一起,就形成了一些风趣的排列组合。

比方,是否存在NOT INITIAL, 但一起也NOT BOUND的变量?是否存在一起满意IS INITIAL, NOT BOUND和IS ASSIGNED的field symbol? 下面咱们用一个简略的ABAP报表来研讨这些排列组合。

完好的测验代码:

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

一起满意NOT INITIAL和NOT BOUND的引证变量

下图main办法里,第15行在栈上界说了一个整型变量number,将其引证赋给类的成员变量dref. 待main办法履行之后,number所生计的栈帧被毁掉,因而dref指向的引证不再有用,调试器里显现为:FREED STACK.

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

现在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.

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

也便是说,无论是读取field symbol详细的内容,仍是检测其内容是否为初始值,为了防止GETWA_NOT_ASSIGNED过错,咱们必须在IS INITIAL判别之前,运用IS ASSIGNED判别field symbol是否被分配了内存区域。

是否存在一个NOT BOUND, IS INITIAL可是却IS ASSIGNED的field symbol?

答案是必定的。

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

上面代码第37行界说的名为的field symbol,在第45行的CLEAR操作完结之后,就一起满意这三个条件。这个field symbol被分配的内存区域,内容并不是整型数自身,而是一个指向整型变量的引证。

该报表打印输出如下:

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

第40行代码经过ASSIGN分配给的内存区域并未经过UNASSIGN开释,因而 IS ASSIGNED一直回来abap_true. 另一方面,这块内存区域尽管还未开释,但里边寄存的引证变量现已不再指向任何一个有用的变量了,因而IS BOUND回来abap_false. 最终,由于施加了CLEAR操作, 又回到了初始化状况,所以IS INITIAL回来abap_true.

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

一句话总结,便是:判别引证变量是否有用,用IS BOUND; 判别变量是否处于初始状况,用IS INITIAL; 判别field symbol是否分配有内存区域,用IS ASSIGNED. 在对field symbol进行各种操作之前,先调用IS ASSIGNED进行判别,以防止GETWA_NOT_ASSIGNED过错。

感谢阅览。

ABAP专题

  • Jerry的ABAP, Java和JavaScript乱炖
  • ABAP开发人员未来应该学些什么
  • Jerry 2017年的五一小长假:8种经典排序算法的ABAP完结
  • Jerry的ABAP原创技能文章合集
  • 300行ABAP代码完结一个最简略的区块链原型
  • 运用Java+SAP云渠道+SAP Cloud Connector调用ABAP On-Premise体系里的函数
  • 在SAP云渠道的CloudFoundry环境下消费ABAP On-Premise OData服务
  • ABAP vs Java, 蛙泳 vs 自由泳
  • 聊聊C言语和ABAP
  • 着手运用ABAP Channel开发一些小东西,提高日常作业效率
  • 我用ABAP做过的那些无聊的作业
  • 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧
  • 运用Visual Studio Code编写和激活ABAP代码
  • 你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
  • 在SAP云渠道ABAP编程环境上编写榜首段ABAP程序
  • SAP官方发布的ABAP编程规范
  • ABAP Code Inspector那些躲藏的功用,您都知道吗?
  • 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧
  • ABAP Netweaver体内的那些寄生式编程言语
  • 从SAP社区上的一篇博客开端,聊聊SAP产品命名背面的那份情怀
  • 云端的ABAP Restful服务开发
  • 如安在SAP云渠道ABAP编程环境里把CDS view露出成OData服务
  • 运用abapGit在ABAP On-Premises体系和SAP云渠道ABAP环境之间进行代码传输
  • 30分钟用Restful ABAP Programming模型开发一个支撑增修改查的Fiori运用
  • Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的完结
  • Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP运用调试
  • SAP云渠道上的ABAP编程环境里怎么消费第三方服务
  • ABAP开发者上云的时分到了 - 现在我们能够免费运用SAP云渠道ABAP环境的试用版了
  • 学而不思则罔 - SAP云渠道ABAP编程环境的由来和适用场景
  • SAP云渠道里的三叉戟运用
  • 怎么根据Restful ABAP Programming模型开发并布置一个支撑增修改查的Fiori运用
  • SAP 2019 TechEd Key Note解读:云年代下SAP从业人员怎么做二次开发?
  • 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?
  • ABAP开发环境总算支撑以驼峰命名法主动格式化ABAP变量名了
  • 运用ABAP 740的新关键字REDUCE完结一个实践作业使命
  • 一段让人瑟瑟发抖的ABAP代码
  • 昨日万圣节ABAP怪兽级代码疑团,发布答案啦
  • 介绍一种在ABAP内核态进行内表高效复制的办法
  • 运用SAP Cloud Application Programming模型开发OData的一个实践比如
  • 当ABAP遇见普罗米修斯
  • 运用ABAP制作可弹性矢量图
  • ABAP开发环境语法高亮的那些事儿
  • SAP过错音讯调试之七种兵器:让一切的过错音讯都能被定位
  • 运用ABAP操作Excel的几种办法
  • SAP GUI里的收藏夹业务码管理东西
  • SAP GUI和Windows注册表
  • 有了Debug权限就能干坏事?当心了,你的一举一动尽在体系监控中
  • ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼
  • 完结ABAP条件断点的三种办法
  • 运用SAT盯梢监控从浏览器翻开的SAP运用的功能和调用栈
  • 一个13年ABAP老兵的主张:了解这些基础知识,对ABAP开发有百利而无一害
  • SAP ABAP Netweaver容器化, 不可能完结的使命吗?
  • SAP产品增强技能回忆
  • SAP API开发办法大全
  • 浅谈Java和SAP ABAP的静态署理和动态署理,以及ABAP面向切面编程的测验
  • SAP ABAP运用服务器的HTTP呼应状况码(Status Code)
  • SAP ABAP里存在Java List这种调集东西类么?CL_OBJECT_COLLECTION了解一下
  • ABAP面试题系列:写一组会呈现死锁(Deadlock)的ABAP程序
  • SAP ABAP Netweaver服务器的规范登录办法解说
  • SAP ABAP关键字语法图和ABAP代码主动生成东西Code Composer
  • SAP ABAP SM50的特殊用处 - ABAP作业进程对数据库表读取操作的检测
  • 关于SAP ABAP字符变量和字符串变量字符个数的一个知识点,和一个血案

本文来自云栖社区合作伙伴“汪子熙”,了解相关信息能够重视微信大众号"汪子熙"。