`
JerryWang_SAP
  • 浏览: 1031145 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

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行定义的名为的field symbol,在第45行的CLEAR操作完成之后,就同时满足这三个条件。这个field symbol被分配的内存区域,内容并不是整型数本身,而是一个指向整型变量的引用。

该报表打印输出如下:

 

 

第40行代码通过ASSIGN分配给的内存区域并未通过UNASSIGN释放,因此 IS ASSIGNED始终返回abap_true. 另一方面,这块内存区域虽然还未释放,但里面存放的引用变量已经不再指向任何一个有效的变量了,因此IS BOUND返回abap_false. 最后,因为施加了CLEAR操作, 又回到了初始化状态,所以IS INITIAL返回abap_true.

 

 

一句话总结,就是:判断引用变量是否有效,用IS BOUND; 判断变量是否处于初始状态,用IS INITIAL; 判断field symbol是否分配有内存区域,用IS ASSIGNED. 在对field symbol进行各种操作之前,先调用IS ASSIGNED进行判断,以避免GETWA_NOT_ASSIGNED错误。

感谢阅读。

ABAP专题

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

0
0
分享到:
评论

相关推荐

    abap关键字的查询帮助

    这些文件对于学习和查询ABAP关键字非常有用,因为它们通常包含详尽的描述、用法示例以及可能的错误处理情况。使用这些资源,开发者可以快速查找并理解特定关键字的功能,从而提高编写代码的效率。 在ABAP中,关键字...

    ABAP/4中文帮助文档

    2. 变量声明:在ABAP中,变量需要先声明后使用,可以定义局部变量和全局变量。 3. 语句结构:包括条件语句(IF...THEN...ELSE...ENDIF)、循环语句(WHILE...DO...ENDWHILE、FOR...NEXT)和选择语句(CASE...END...

    abap破解访问关键字

    ABAP 访问关键字破解 ABAP 访问关键字破解是指在 SAP 系统中,通过修改权限判断文件 LSKEYF00 中的判断参数的值,以达到绕过权限判断的目的。下面是破解步骤的详细分析: 一、去掉权限判断文件 LSKEYF00 的只读...

    ABAP开发账号访问关键字(ACCESSKEY)获取方法[收集].pdf

    ABAP开发账号访问关键字(ACCESS KEY)获取方法 ABAP是SAP公司开发的一种...因此,在ABAP开发中,获取访问关键字是一个非常重要的步骤,开发者需要掌握获取访问关键字的方法,以便快速地创建ABAP程序,提高开发效率。

    ABAP开发账号访问关键字(ACCESS_KEY)获取方法

    本文将详细介绍如何获取这一重要的访问关键字,包括其背景介绍、获取步骤以及所需工具的使用方法。 #### 二、ABAP开发账号访问关键字概述 在首次创建ABAP程序或进行某些特定操作时,系统可能会要求输入访问关键字...

    ABAP基础教程学习

    逻辑表达式包括比较运算符(如EQ、NE、LT等)、IS操作符(如IS INITIAL、IS ASSIGNED)以及BETWEEN、AND、OR和NOT等。ABAP程序的关键字分为四类:说明性(如TYPES、DATA、TABLES)、事件(如AT SELECTION SCREEN、...

    ABAP开发账号访问关键字(ACCESSKEY)获取方法定义.pdf

    ABAP开发账号访问关键字(ACCESSKEY)获取方法定义.pdf

    abap基础知识(很适合初学者)

    逻辑表达式包括等于(EQ)、不等于(NE)、小于(LT)、小于等于(LE)、大于(GT)、大于等于(GE)以及IS INITIAL、IS ASSIGNED、BETWEEN等操作符。同时,ABAP还提供了AND、OR和NOT等逻辑运算符。 ABAP程序的...

    abap/4语法

    ABAP支持算术运算,如加、减、乘、除、乘方、整除和取模,以及逻辑运算,包括等于(EQ)、不等于(NE)、小于(LT)、小于等于(LE)、大于(GT)、大于等于(GE)以及IS关键字(如IS INITIAL和IS ASSIGNED)。...

    ABAP 通过程序中的关键字查找程序名和首次出现的行数

    ABAP程序 通过程序中的关键字查找程序名和首次出现的行数,双击程序名进入程序

    从实例学sap abap编程.zip

    《从实例学SAP ABAP编程》是一本针对初学者的详细教程,旨在帮助读者掌握SAP ABAP(Advanced Business Application Programming)的核心概念和技术。ABAP是SAP系统中的主要编程语言,用于开发企业级应用,如报表、...

    关于SAP开发语言abap的基础语法

    7. ABAP不区分大小写,关键字和用户操作数都一样,为了便于阅读,一般把关键字大写,而操作数小写。 ABAP数据类型: 1. D:日期类型,格式为YYYYMMDD,长度为8。 2. T:时间类型,格式为HHMMSS,长度为6。 3. I:...

    ABAP语法概述.ppt

    运算方面,ABAP支持多种算术运算,如加减乘除、乘方以及整除和取模,同时还有逻辑运算符,如等于(EQ)、不等于(NE)、小于(LT)、小于等于(LE)、大于(GT)、大于等于(GE)以及IS初期化和分配检查。此外,还有BETWEEN操作...

    abap基础语法,SAP入门好助手

    逻辑表达式则包括等于、不等于、小于、大于等比较操作,还有IS系列的检查操作符和BETWEEN操作符,以及AND、OR和NOT的逻辑组合。 控制结构是ABAP编程的关键部分,包括IF、WHILE、CASE等条件控制,以及事件处理的...

    ABAP 基础文档

    逻辑表达式有EQ、NE、LT、LE、GT、GE等比较操作符,还有IS INITIAL和IS ASSIGNED等检查字段状态的运算符。 **ABAP程序结构** ABAP程序由不同的关键字组成,如: 1. 说明性关键字(TYPES, DATA, TABLES)用于定义...

    ABAP OLE开发EXCEL

    标题与描述均提及了“ABAP OLE开发EXCEL”,这明确指出了本文将探讨的主题:如何使用ABAP(一...在实际应用中,熟练掌握上述提到的关键字和操作流程,将有助于解决复杂的数据处理需求,同时提高数据的一致性和准确性。

    abap4 程序语法和 格式

    2. **使用模块化工具**: ABAP4支持模块化编程,通过定义和使用子程序(Subroutines)或函数模块(Function Modules),可以有效地组织代码并重用功能。 3. **正确插入程序注释**: 在适当的位置添加注释,帮助其他...

    SAP的开发工具ABAP-4学习资料

    这个“SAP的开发工具ABAP-4学习资料”压缩包提供了关于ABAP的关键字使用方法的学习资源,这对于想要深入理解并掌握ABAP编程的人来说是非常宝贵的。 首先,我们要了解ABAP的基本结构和语法。ABAP是一种结构化编程...

    ABAP基础入门

    - **语句构成**:由独立的语句组成,每个语句以ABAP关键字开头,关键字和后续词之间需至少有一个空格分隔。 - **语法格式**:语句结束必须以句号结尾;支持多行语句,只要不遇句号,即视为同一语句;不区分大小写,...

    SAP ABAP开发

    ABAP支持多种运算,如算术运算、逻辑运算、时间日期运算等,以及逻辑运算符如EQ、NE、LT、LE、GT、GE、IS INITIAL、IS ASSIGNED和BETWEEN等。 ABAP的关键字分为四类:说明性关键字(如TYPES, DATA, TABLES,用于...

Global site tag (gtag.js) - Google Analytics